A foo; oder A foo();?
-
Öhm ja, am besten mache ich es kurz: Gibt es einen Unterschied ob man die Klammern dort hinschreibt oder nicht?
-
The-Kenny schrieb:
Öhm ja, am besten mache ich es kurz: Gibt es einen Unterschied ob man die Klammern dort hinschreibt oder nicht?
Wie Dir ein kurzer Test hätte bestätigen können: ja. Ersteres definiert eine Variable, zweiteres deklariert eine Funktion.
-
Konrad Rudolph schrieb:
The-Kenny schrieb:
Öhm ja, am besten mache ich es kurz: Gibt es einen Unterschied ob man die Klammern dort hinschreibt oder nicht?
Wie Dir ein kurzer Test hätte bestätigen können: ja. Ersteres definiert eine Variable, zweiteres deklariert eine Funktion.
Hm ne, das ist mir schon klar^^ Ich hab mich wohl etwas undeutlich ausgedrückt.
Ich meinte nicht die Funktionsdeklaration, sondern die Definition einer Variable eines eigenen Typs:
struct blubb { void set(); }; int main() { blubb a; a.set(); blubb b(); b.set(); }
-
The-Kenny schrieb:
Ich meinte nicht die Funktionsdeklaration, sondern die Definition einer Variable eines eigenen Typs:
Es *ist* in jedem Fall eine Funktionsdeklaration. Der C++-Compiler "argumentiert" folgendermaßen:
- Die Definition ist a priori doppeldeutig, denn es könnte einerseits eine Variablendefinition gemeint sein (+ Default-Konstruktur-Aufruf) oder eben eine parameterlose Funktionsdefinition mit Rückgabetyp.
- Diese Doppeldeutigkeit wird *immer* zugunsten der Funktion aufgelöst.Mit anderen Worten: *wenn* etwas – rein lexikalisch – eine Funktionsdeklaration sein *könnte* dann *ist* es auch eine. Daher ist 'a b();' *immer* eine Funktionsdeklaration, egal, was 'a' und 'b' für Bezeichner sind.
/EDIT: Und dass Dein Beispielcode fehlerhaft ist (weil der Compiler sich beschwert, '.set' könne nicht auf eine Funktion angewendet werden), sollte Dir ein einfacher Test eigentlich zeigen.
-
Hm... stimmt.
Naja, wieder was gelernt, außerdem verstehe ich jetzt was der Fehler mir sagen will *g*
Danke^^