Kurze Frage zum Konstruktor .



  • Hallo Leute .
    Ich wiederhole gerade die Prinzipien der Zeigerarithmetik und bin auf einen kleinen Fehler gestoßen den ich nicht deuten kann .
    Der Code soll keine Funtkion erfülllen ich war lediglich am herum probieren .
    Nun zu meiner Frage .
    Sobald ich in der main.cpp in der vorletzen zeile statt

    cat anotherCat; cat anotherCat(); aufrufe bekomme ich folgende Fehlermeldung ..

    cannot convert 'cat ()()' to 'const cat' for argument '1' to 'int aFunc(const cat*)'

    Ist es nicht egal ob ich "cat bla" statt "cat bla()" aufrufe ?
    In beiden Fällen wird doch der Standard Konstruktor aufgerufen oder nicht ?
    Und wie ist diese Fehlermeldung zu deuten .. ?

    Greets

    Folgender Code :

    #include <cat.h>
    int aFunc( const cat * aP)
    {
    
    	return aP->getA();
    
    }
    
    int main (int argc, char * const argv[]) {
        // insert code here...
        std::cout << "Hello, World!\n";
    	int * pInt = new int; // Objekt auf Heap erzeugt 
    	delete pInt; // Speicher auf Heap freigeben
    	int a = 6; // Variable a mit 6 initialisieren
    	pInt = &a; // pInt die Adresse von a zuweisen 
    	*pInt = 7; // das was an der Adresse steht die in pInt gespeichert ist wird nun zur 7
    	cat * aCat = new cat;
    	std::cout << aCat->getA() << std::endl;
    	std::cout << new int << std::endl;
    	cat anotherCat;
    	aFunc(&anotherCat);
        return 0;
    }
    
    class cat
    {
    	private :
    
    	int * a;
    	int * b;
    
    	public:
    
    	cat();
    	~cat();
    	int getA()const;
    	void setA(int _a);
    
    };
    
    #include "cat.h"
    
    cat::cat()
    {
    	a = new int;
    	*a = 0;
    
    	b = new int;
    	*b =0;
    
    }
    cat::~cat()
    {
    	delete a;
    	a = 0;
    	delete b;
    	b = 0;
    }
    int cat::getA()const
    {
    	return *a;
    }
    void cat::setA(int _a)
    {
    	*a = _a;
    }
    


  • Nein. Bei der zweiten Variante wird kein Objekt erstellt, sondern eine Funktion deklariert. Die Fehlermeldung besagt, dass der Zeiger auf die Funktion nicht nach const cat* konvertiert werden kann.

    Soweit ich weiß, gilt deine Annahme, wenn du die Objekte auf dem Heap erzeugst:

    cat* cat1 = new cat();
    cat* cat2 = new cat;
    


  • Implementiere ich einen Konstruktor der zwei int werte übernimmt kann ich das Objekt doch auch folgender maßen erstellen :

    cat anotherCat(3,7);
    

    Der Compiler müsste doch bei

    cat anotherCat();
    

    sehen das ich nur den Standard Konstruktor aufrufen möchte.
    Eine Funktion in der Main zu deklarieren funktioniert doch normalerweise gar nicht , deklariert man nicht eigentlich vor der main seine Funktionen ?

    Das macht doch keinen Sinn oder liege ich da jetzt irgendwie falsch ?



  • Für ne Erklärung:
    Google mal nach "most vexing parse".



  • Ok , hat sich erledigt . Habs verstanden .



  • huhu, wie dasd schon gesagt hat, ist

    cat anotherCat(); // Prototyp einer Funkion
    

    die Deklaration einer Funktion namens anotherCat, und hat überhaupt gar nichts mit einem Konstruktor zu tun.



  • Ok dankeschön , das wusste ich auch noch nicht .


Anmelden zum Antworten