Fehler?



  • Hallo habe Probleme bei einem ganz einfachen Programm.

    KFZ.h

    #ifndef KFZ_H_INCLUDED
    #define KFZ_H_INCLUDED
    
    #include <iostream>
    
    using namespace std;
    
    class KFZ
    {
        public:
    
        // Konstruktor
    
        //KFZ(int nTankgr,double nVerbrauch100Km,double nTankinhalt,double nKmStand,double nGewicht){};
    
        void erzeugen (int nTankgr,double nVerbrauch100Km,double nTankinhalt,double nKmStand,double nGewicht){};
    
        // Alles Zeigen
    
        void Show();
    
        private:
    
        int Tankgr;
        double Verbrauch100Km;
        double Tankinhalt;
        double KmStand;
        double Gewicht;
    
    };
    
    #endif // KFZ_H_INCLUDED
    

    KFZ.cpp

    #include <iostream>
    #include "KFZ.h"
    
    using namespace std;
    
    }
    // Konstruktor
    
    void KFZ::erzeugen(int nTankgr,double nVerbrauch100Km,double nTankinhalt,double nKmStand,double nGewicht)
    {
        Tankgr = nTankgr;
        Vebrauch100Km = nVerbrauch100Km;
        Tankinhalt = nTankinhalt;
        KmStand = nKmStand;
        Gewicht = nGewicht;
    }
    
    //Show Funktion
    
    void KFZ::Show()
    {
        cout<< "Tankgroeße : "<< Tankgr <<endl;
        cout<< "Verbrauch auf 100 Km : "<< Verbrauch100Km <<endl;
        cout<< "Tankinhalt zurzeit : "<< Tankinhalt <<endl;
        cout<< "Aktueller Km Stand : "<< KmStand <<endl;
        cout<< "Zulässiges Gewicht : "<< Gewicht <<endl;
    
    }
    

    **
    main.cpp**

    #include <iostream>
    #include "KFZ.h"
    
    using namespace std;
    
    int main()
    {
        KFZ Audi;
        Audi.erzeugen(50,8.7,3.4,5.4,1.0);
    
        Audi.Show;
    
        return 0;
    }
    

    Beim Ausführen bekomm bei Audi.Show; folgende Fehlermeldung:
    error: Statement cannot resolve adress of overloaded function

    Dacht erst es liegt am Konstruktor deswegegen habe ich die Methode erzeugen geschrieben... leider ohne Erfolg.

    danke schon mal.

    /edit pumuckl: code-tags. Demnächst bitte selbst dran denken!



  • Audi.Show**()**?



  • Hint: erzeugen -> konstruieren -> Konstruktor 😉



  • was ist da der Fehler mit KFZ Audi; wird ein objekt erzeugt und mit Audi.Show(); führe ich es in der Show Methode aus oder



  • @HeikoGrue:

    * Welchen Sinn hat die Methode "erzeugen"?

    * Wofür dient ein Konstruktor?



  • daddy_felix schrieb:

    @HeikoGrue:

    * Welchen Sinn hat die Methode "erzeugen"?

    * Wofür dient ein Konstruktor?

    Er hat ja geschrieben, dass er die Funktion nur zu Debugging-Zwecken erstellt hat. Vorher war's mit einem Konstruktor.

    Edit: ich versuch's nochmal: Audi.Show ➡ ()



  • Oben siehst man den Konstruktor der ist auskommentiert.

    Diese füllt die einzelnen Attribute.

    und Show Methode gibt das Auto dann aus.

    benötige nur kurze hilfe was da den falsch ist.



  • NOCHMAL

    main

    #include <iostream>
    #include "KFZ.h"

    using namespace std;

    int main()
    {
    KFZ::KFZ Audi(50,8.7,3.4,5.4,1.0);

    Audi.Show;

    return 0;
    }

    Header

    #ifndef KFZ_H_INCLUDED
    #define KFZ_H_INCLUDED

    #include <iostream>

    using namespace std;

    class KFZ
    {
    public:

    // Konstruktor

    KFZ(int nTankgr,double nVerbrauch100Km,double nTankinhalt,double nKmStand,double nGewicht){};

    // Alles Zeigen

    void Show();

    private:

    int Tankgr;
    double Verbrauch100Km;
    double Tankinhalt;
    double KmStand;
    double Gewicht;

    };

    #endif // KFZ_H_INCLUDED

    So mit dem Konstruktor.. das ist ja eigendlich kein Hexenwerk. Bin in c++ neu in Java denke würde ich mir nicht soo schwer tun^^

    Wo könnte den der Fehler liegen bzw kann mir jemand das verbessern und mir erklären?



  • Da ist das nicht wirklich anders, also auf dem Wissenslevel der Objektorientierung.

    Und du allen (auch dir) den Gefallen und setzt deinen Code in Code Tags, die Digner utner dem Beitrag schreiben Fenster (wo C++ dransteht)



  • Wie von Rewind schon mehrmals angedeutet, mußt du bei einer Funktion die () mitschreiben.

    Also Audi.show();



  • Das habe ich habe wohl das falsche gepostet.



  • Funktioniert nicht habe ich ja bereits



  • "Geht nicht" gibst nicht, jedenfalls nicht ohne Fehlerbeschreibung



  • Dann poste doch mal bitte den richtigen Code, und zwar in C++-Tags.



  • Die neue Fehlermeldung ist dann aber undefined reference to KFZ::Show()



  • Header

    #ifndef KFZ_H_INCLUDED
    #define KFZ_H_INCLUDED
    
    #include <iostream>
    
    using namespace std;
    
    class KFZ
    {
        public:
    
        // Konstruktor
    
        KFZ(int nTankgr,double nVerbrauch100Km,double nTankinhalt,double nKmStand,double nGewicht){};
    
        //void erzeugen (int nTankgr,double nVerbrauch100Km,double nTankinhalt,double nKmStand,double nGewicht){};
    
        // Alles Zeigen
    
        void Show();
    
        private:
    
        int Tankgr;
        double Verbrauch100Km;
        double Tankinhalt;
        double KmStand;
        double Gewicht;
    
    };
    
    #endif // KFZ_H_INCLUDED
    

    KFZ.cpp

    #include <iostream>
    #include "KFZ.h"
    
    using namespace std;
    
    }
    // Konstruktor
    
    void KFZ::erzeugen(int nTankgr,double nVerbrauch100Km,double nTankinhalt,double nKmStand,double nGewicht)
    {
        Tankgr = nTankgr;
        Vebrauch100Km = nVerbrauch100Km;
        Tankinhalt = nTankinhalt;
        KmStand = nKmStand;
        Gewicht = nGewicht;
    }
    
    //Show Funktion
    
    void KFZ::Show()
    {
        cout<< "Tankgroeße : "<< Tankgr <<endl;
        cout<< "Verbrauch auf 100 Km : "<< Verbrauch100Km <<endl;
        cout<< "Tankinhalt zurzeit : "<< Tankinhalt <<endl;
        cout<< "Aktueller Km Stand : "<< KmStand <<endl;
        cout<< "Zulässiges Gewicht : "<< Gewicht <<endl;
    
    }
    

    Main.cpp

    #include <iostream>
    #include "KFZ.h"
    
    using namespace std;
    
    int main()
    {
        KFZ::KFZ Audi(50,8.7,3.4,5.4,1.0);
    
        Audi.Show();
    
        return 0;
    }
    


  • eddi0815 schrieb:

    Also Audi.show();

    Zu den Klammern sagt man auch manchmal "function call operator". 🙂

    HeikoGrue schrieb:

    Die neue Fehlermeldung ist dann aber undefined reference to KFZ::Show()

    Dann hast du die "one definition rule" nicht beachtet. (Mal so am Rande: Das ist eine Fehlermeldung des Linkers und nicht des Compilers.)

    Edit:
    - using namespace std; hat in Header-Dateien nichts zu suchen! Jedenfalls nicht auf dieser Namensraumebene!
    - Dein Konstruktor ist Käse. Der nimmt alle möglichen Parameter entgegen und tut gar nichts!
    - Du definierst in KFZ.cpp eine Funktion, die es laut Klassendefinition gar nicht gibt (erzeugen)
    - in KFZ.cpp steht ein verlorenes }

    Kompilierst du KFZ.cpp auch und linkst die resultierende Objektdatei dazu?



  • und das bedeutet für mich=?



  • Edit:
    - using namespace std; hat in Header-Dateien nichts zu suchen! Jedenfalls nicht auf dieser Namensraumebene!

    wieso nicht? diese wird in den Unterklassen inkludiert... und somit ist es in den andern Klassen auch oder.

    Aber habe es weg.

    - Dein Konstruktor ist Käse. Der nimmt alle möglichen Parameter entgegen und tut gar nichts!

    ein Default Kontstruktor gibt den Attributen den wert 0 dieser hier füllt die werte oder nicht=?

    - Du definierst in KFZ.cpp eine Funktion, die es laut Klassendefinition gar nicht gibt (erzeugen)

    erzeugen ist bereits rausgenommen.

    - in KFZ.cpp steht ein verlorenes }

    gefunden und beseitigt.

    Kompilierst du KFZ.cpp auch und linkst die resultierende Objektdatei dazu?

    ===??????

    Fehlermeldung bleibt.



  • HeikoGrue schrieb:

    und das bedeutet für mich=?

    - using namespace ganz weglassen und überall std:: schreiben (wo es nötig ist) oder nur in Funktionen verwenden, und zwar so stark wie möglich eingeschränkt (soll heißen: using namespace std::cout; )
    - Initialisiere die Member mit der Initialisierungsliste im Konstruktor (s. Google)

    • void erzeugen () in der Klassendefinition deklarieren
      - die geschweifte Klammer wegmachen
    • #include <iostream> in main.cpp und KFZ.cpp löschen
      - Das Objekt so erstellen: KFZ Audi... und nicht KFZ::KFZ Audi... .
      - Alle Kapiteln bis zu dem über Klassen nochmal lesen.

Anmelden zum Antworten