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!


Anmelden zum Antworten