Klammern bei Objekterzeugung
-
Was ist denn der gravierende Unterschied zwischen
MeineKlasse Objekt;und
MeineKlasse Objekt();??
Wenn ich es nämlich mit Klammern schreibe, kommt später beim Aufruf einer Methode ne Fehlermeldung:
error C2228: left of '.meineMethode' must have class/struct/union type
Denkt der Compiler etwa Objekt() ist eine Funktion mit Rückgabewert MeineKlasse?
Und wieso gibt es keinen Unterschied zwischen:
MeineKlasse* Zeiger = new MeineKlasse();und
MeineKlasse* Zeiger = new MeineKlasse;
-
NullAhnung schrieb:
Denkt der Compiler etwa Objekt() ist eine Funktion mit Rückgabewert MeineKlasse?
jes. wie sollte er an dieser stelle eine funktionsdeklaration von einer instanziierung unterscheiden können?
-
elise schrieb:
NullAhnung schrieb:
Denkt der Compiler etwa Objekt() ist eine Funktion mit Rückgabewert MeineKlasse?
jes. wie sollte er an dieser stelle eine funktionsdeklaration von einer instanziierung unterscheiden können?
was soll das denn für eine funktion sein?
wenn links der klassenname steht ist das doch eindeutig oder?in java setzt man immer die klammern
-
Also in Java kann man keine Klassen als Variablen bzw. auf dem Stack instanzieren, geht nur mit new. Somit ist hier Java völlig fehl am Platz als Vergleich. Selbst wenn, wir sind hier im C++ Forum.
Du sagst es aber selber: links daneben steht der Klassenname. Und der Compiler meckert es korrekterweise an. Eigentlich kann es dir doch egal sein. Er will keine "()" haben, weil es nunmal so im Standard festgelegt ist. Punkt!
Hört sich jetzt plump an, aber das ist die Erklärung.

-
Ja, das akzeptiere ich ja. Und bei der zweiten Frage? Warum ist es da plötzlich egal? Auch nur akzeptieren und gut?

-
steff3 schrieb:
was soll das denn für eine funktion sein?
logisch ist das eine funktionsdeklaration. ist doch alles dabei, datentyp des rückgabewerts, funktionsname, klammerung.

übrigens ein fehler, den schon viele machten und litten.. :xmas2:
-
Die Klammern bei new bewirken bei primitiven Typen bzw. PODs (dumme Klassen ohne Konstruktor usw.) eine Initialisierung, ohne Klammern ist der Wert unbestimmt.
-
Abgesehen davon, dass der MS-Compiler wirklich mit dieser Sache Probleme hat,
is das wohl eher auf ein Fehler des Compilers zurückzuführen als denn auf
eine Mehrdeutigkeit des Codes.MeineKlasse Objekt ();is nie und nimmer ein gültiger Funktionsaufruf. Wieso in aller Welt soll da der Compiler nicht in der Lage sein zu erkennen, dass da der Konstruktor gemeint ist?
-
Es redet auch niemand von einem Funktionsaufruf sondern von einer Funktionsdeklaration - und genau das ist es auch.
MfG SideWinder