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 1
    

    Ich 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


Anmelden zum Antworten