cannot call member function without object



  • Nabend.
    Ich habe ein Problem bei folgendem Programm.

    header.h:

    #ifndef HEADER_H_INCLUDED
    #define HEADER_H_INCLUDED
    
    class Bruch {
    
        private:
            double zaehler;
            double nenner;
    
        public:
            Bruch(double z = 0, double n = 0);
    
            double getZaehler();
            void setZaehler(double z);
            double getNenner();
            void setNenner(double n);
    
            void showBruch(Bruch::Bruch b);
    
    };
    
    #endif // HEADER_H_INCLUDED
    

    klasse.cpp:

    #include "header.h"
    #include <iostream>
    
    Bruch::Bruch(double z, double n) {
        zaehler = z;
        nenner = n;
    }
    
    double Bruch::getZaehler() {
        return zaehler;
    }
    
    void Bruch::setZaehler(double z) {
        zaehler = z;
    }
    
    double Bruch::getNenner() {
        return nenner;
    }
    
    void Bruch::setNenner(double n) {
        nenner = n;
    }
    
    void Bruch::showBruch(Bruch b) {
        std::cout << b.getZaehler() << std::endl;
        std::cout << "_____" << std::endl;
        std::cout << b.getNenner() << std::endl;
    }
    

    main.cpp:

    #include <iostream>
    #include "header.h"
    
    int main()
    {
    
        Bruch b1(23,15);
    
        std::cout << b1.getZaehler() << " / " << b1.getNenner() << std::endl;
    
        Bruch::showBruch(b1);
    
        return 0;
    }
    

    beim compilieren wird der Fehler

    cannot call member function 'void Bruch::showBruch(Bruch)' without object
    

    ausgegeben.

    Woran liegt das? 😕
    Die getter-Aufrufe in der main() funktionieren.

    THX!



  • wenn du eine Funktion statisch aufrufen willst (warum?) musst du sie auch static deklarieren (nochmal: warum?)



  • Wieso übergibst du der ShowBruch()-Methode den auszugebenden Bruch eigentlich als Parameter? Als Methode der Klasse hat sie doch schon Zugriff auf ein Objekt, mit dem sie arbeiten kann.

    Ansonsten: Eine normale Methode kann nur mit einem existierenden Objekt aufgerufen werden (also in der Form b1.ShowBruch(...); , die Schreibweise Bruch::ShowBruch(...); ist nur für statische Methoden oder innerhalb der Klasse erlaubt.



  • ja sry völlig aufem schlauch gestanden

    b1.show...
    parameter raus
    und this-> verwenden



  • Ist garantiert nicht die selbe.

    Tipp: wnen du die Funktion so aufrufen willst, darf sie keinen parameter haben.


Anmelden zum Antworten