Probleme mit Pointern auf Objekte
-
Hey, eine Frage:
Warun kann ich keine normalen Pointer auf Objekte erstellen, deren Konstruktor ich keine Parameter gegeben habe?
Folgendes Beispiel:
class A { public: A(int data =1); int getData()const {return mData;} private: int mData; }; class B { public: int getData()const {return 2;} }; A::A(int data): mData(data) {} int main(int argc, char *argv[]) { A a1(1); A a2(); B b(); A *pa1(&a1); A *pa2(&a2); // Hier der Fehler! B *pb(&b); // Hier der Fehler! system("PAUSE"); return EXIT_SUCCESS; }Ich will also Pointer auf die Objekte erstellen, einfach mithilfe des Adressoperators.
Der Compiler gibt mir aber folgende Fehlermeldung:
"cannot convert 'A ()()' to 'A' in initialization"
Warum erstellt er denn nicht einfach normale Pointer sondern 'A (*)()', und vor allem: Warum hängt das mit der Art des Konstruktoraufrufs zusammen?
Was muss ich machen, damit ich normale Pointer kriege?Danke schonmal im Voraus.
-
int main() { A a1(1); A a2(); // Dies ist eine Funktionsdeklaration, richtig wäre "A a2;" B b(); // Dies ist eine Funktionsdeklaration, richtig wäre "B b;" //...
-
Weil du eine Funktionsdeklaration machst und nicht den Standardkonstruktor aufrufst. Entferne die leeren Klammern und es sollte gehen.
A a2(); // Prototyp für eine Funktion die A zurück gibt A a2; // Objekt der Klasse A
-
Aaaaaaaaaah!

Das erklärt einiges.
Stimmt, ist mir gar nicht aufgefallen, dass ich in Wahrheit eine Funktion deklariert habe.
Gut das hat's gelöst, dankeschön!