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 stattcat 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 Funkiondie Deklaration einer Funktion namens anotherCat, und hat überhaupt gar nichts mit einem Konstruktor zu tun.
-
Ok dankeschön , das wusste ich auch noch nicht .