Anfängerfrage OOP
-
Hallo Leute,
ich lerne grad C++ und spiele mal ein bissle mit Klassen rum. Nun habe ich beim komplilieren mit Dev-C++ 4.9.9.2 folgenden Fehler erhalten:
main.cpp: In function `int main()': main.cpp:69: error: request for member `print' in `myObj2', which is of non-class type `Basis ()()' make.exe: *** [main.o] Error 1Ich kann den Fehler zwar beheben in dem ich die Klammern hinter myObj2 entferne, nur wunder ich mich warum ich keine Klammern setzen darf.
hier ist mal mein Testprogramm:#include <iostream> using namespace std; // Basis.hpp class Basis { private: int var; static int count; public: Basis(int var = 0); ~Basis(); void set(int var); int get(); void print(); }; // Basis.cpp int Basis::count = 0; Basis::Basis(int var) { ++count; cout << "Basis ctor " << count << endl; set(var); } Basis::~Basis() { cout << "Basis dtor " << count << endl; --count; } void Basis::set(int var) { this->var = var; } int Basis::get() { return this->var; } void Basis::print() { cout << "var=" << var << endl; } int main() { { Basis myObj1; myObj1.print(); Basis myObj2(); myObj2.print(); Basis* myObj3 = new Basis(); myObj3->print(); delete myObj3; } std::cout << "Press ENTER to close..."; std::cin.clear(); std::cin.ignore(std::cin.rdbuf()->in_avail()); std::cin.get(); return EXIT_SUCCESS; }Gruß Chris
-
hi
hier :
Basis myObj2(); myObj2.print();siehst du den schönen fehler, den "javaisten" gerne beim umstieg nach c++ machen.
Basis myObj2(); wird vom compiler als funktion interpretiert, nicht als instanzierung eines Objektes.
gruß
ps: noch ein wort dazu: Basis ist datentyp des rückgabewerts, myObj2 wird als funktiopnsname angenommen, die klammern als funktionsklammern.
-
Danke für die schnelle Antwort, ja dass der Compliler da ne Funktion drin sieht macht Sinn und ich kann nun beruhigt weitermachen. Habe tatsächlich vor C++ ein wenig mit Java rumgespielt und da kannste ja kaum Fehler in dieser Art machen.
Gruß Chris