Dieser Code verhält sich nicht wie ich es erwarte.Warum wird der Konstruktor nicht aufgerufen?
Ich erwartete die Ausgabe 'Standardkonstruktor genannt', aber ich sah nichts als die Ausgabe. Was ist das Problem?
Dieser Code verhält sich nicht wie ich es erwarte.Warum wird der Konstruktor nicht aufgerufen?
Ich erwartete die Ausgabe 'Standardkonstruktor genannt', aber ich sah nichts als die Ausgabe. Was ist das Problem?
Kein Anruf
Da der Konstruktor Konstruktor wird eigentlich nie genannt.
Class object();
als Deklaration einer Funktion object
nimmt kein Argument und Rückkehr ein Objekt von Class
[von value]
Class object;
EDIT Versuchen interpretiert:
Als Mike dies bemerkt ist nicht genau der Code, den Sie dem Compiler geben. Ist der Konstruktor/Destruktor public
oder ist Class
eine Struktur?
Allerdings google für C++ am meisten ärgerlichen Parse.
Ich bekam die Antwort einen Moment vor mir _und_ umformatierte die Post. +1 – JoshD
Danke @JoshD :) –
Nein. Ihre Zeile Class object();
Wurde zu einer Funktion erklärt. Was Sie schreiben möchten, ist Class object;
Probieren Sie es aus.
Sie könnten auch an der am meisten ärgerlichen Analyse interessiert sein (wie andere bemerkt haben). Ein gutes Beispiel ist in Effective STL Punkt 6 auf Seite 33. (Im zwölften Druck, September 2009.) Insbesondere das Beispiel oben auf Seite 35 ist, was Sie getan haben, und es erklärt, warum der Parser es als eine Funktionsdeklaration behandelt.
+1, BTW Visual C++ - Probleme 'Warnung C4930: prototyped Funktion nicht aufgerufen (war eine variable Definition gemeint?)' In solchen Fällen. – sharptooth
Ist das wirklich das "ärgste Parse"? Ich dachte immer, der Satz bezog sich auf das frustrierendere Problem, dass 'T x (T())' eine Funktionsdeklaration ist. –
@James McNellis: So nannte Scott Meyers es. Ich stimme nicht genau zu, und ich habe diese Frage nicht sofort damit verbunden. Ich denke, dein Beispiel ist viel häufiger und frustrierender. – JoshD
Sie können es wie folgt verwenden:
Class obj;
//or
Class *obj = new Class(/*constructor arguments*/);
Ihr Konstruktor privat ist. –
@ribeas: Das ist nicht wirklich der ärgerlichste Parse; es ist nur ein leicht ärgerlicher Parse. Das "am meisten ärgerliche Parse" ist normalerweise reserviert für den Versuch, eine Variable mit einem Direktinitialisierer eines initialisierten temporären Wertes zu erzeugen: 'A a (A());' (Mein Fehler ursprünglich.) –
siehe auch http://stackoverflow.com/questions/180172/default-constructor-with-empty-brackets –