Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (GNU/Linux, *NIX, *BSD und Co) » Zuweisung funktioniert nicht

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
11.11.2008, 09:13 Uhr
~Hubko
Gast


hi,

hab hier folgende Code Zeile:


C++:
    SetMember t(va_arg(vl,int));
    m_elements[i] = t;



dies funktioniert, mach ich es aber so:


C++:
    m_elements[i] = SetMember t(va_arg(vl,int))



brüllt der compiler, er können keinen Konstruktor finden für SetMember::SetMember(SetMember)

Eig. müsste er den vorhanden Konstruktor für int-Parameter aufrufen, aber er sucht anscheinend nach einen für ein SetMember Objekt. ich versteh nicht warum er das macht, und es aber mit der obigen Methode zu funktionieren scheint, obwohl es doch eig. das selbe ist?1
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
11.11.2008, 10:35 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)


Weil das syntaktisch keinen Sinn macht.
Wenn müsste das so aussehen:

C++:
m_elements[i] = new SetMember(va_arg(vl,int));

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
11.11.2008, 10:53 Uhr
ao

(Operator)


Das ist aber trotzdem was anderes, und zwar in Bezug aufs Speichermanagement.

Guybrush's Code erzeugt eine SetMember-Instanz auf dem Heap und speichert sie in m_elements[i]. Irgendwer muss sich drum kümmern, dass das Ding irgendwann wieder delete't wird.

Hubkos Code legt eine lokale Instanz an, die automatisch zerstört wird, wenn der Scope verlassen wird, in dem das Ganze passiert. Worauf zeigt danach m_elements[i]? Auf ein zerstörtes Objekt? Oder hat SetMember Smartpointer-Eigenschaften?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
11.11.2008, 11:46 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)


Naja das kommt drauf an ob m_elements im selben Scope liegt
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
11.11.2008, 13:22 Uhr
ao

(Operator)


Müßige Diskussion, solange wir nicht die Fakten kennen. Aber Hubko sollte sich Gedanken darüber machen, sonst erlebt er vielleicht eine Überraschung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
11.11.2008, 19:48 Uhr
0xdeadbeef
Gott
(Operator)


Es handelt sich bei m_elements ziemlich offensichtlich nicht um ein Zeigerarray, sondern um ein SetMember[] unbekannter Größe (Oder einen std::vector<SetMember>) - sonst könnte der erste Codeschnippsel nicht funktionieren. Wir können daraus außerdem sehen, dass SetMember assignable ist. Mit anderen Worten,

C++:
m_elements[i] = SetMember(va_arg(vl,int));


sollte das Problem lösen. Wie allerdings der Compiler den zweiten Schnippsel parst, ist mir ein bisschen schleierhaft - ich hätte eher etwas wie "foo expected before bar" erwartet.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 11.11.2008 um 19:50 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (GNU/Linux, *NIX, *BSD und Co) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: