Fehler?



  • Du musst deine .cpp-Dateien im Projekt/Makefile eintragen.



  • HeikoGrue schrieb:

    Wie ich das hasse ... in einem Forum ist es einfach nicht Möglich mal eine schnelle Auskunft zu bekommen..

    Das Ziel eines Forums ist auch nicht unbedingt eine schnelle Hilfe, gerade nicht von diesem, sondern eine nachhaltige

    Zudem bekommst du nur so gute Antworten, wie deine Fragen dies erlauben. Welche Fehlermeldung kommt nun? Weder sehen wir deinen aktuellen Code noch deine aktuelle Fehlermeldung. Glaubst du eigentlich das wir eine magische Glaskugel haben?

    Lies doch bitte einmal Wichtig: Du brauchst Hilfe? durch. Ins besondere den Punkt "Stell deine Fragen präzise".



  • Wie und Wo mache ich das hab ich ja noch nie gehört bitte für Anfänger



  • Heiko, mit deinem vorvorletzten Beitrag kann ich als potentieller Helfer leider nichts anfangen; denn man weiß nicht, wie der aktuelle Stand ist und was für eine Fehlermeldung woher kommt. Streng dich bitte mal beim Hilfegesuch etwas an. Das schließt auch die Interpunktion ein. Danke.



  • HeikoGrue schrieb:

    Wie und Wo mache ich das hab ich ja noch nie gehört bitte für Anfänger

    Da dies abhängig von den eingesetzten Programmen ist, kann dir hierauf wohl keiner eine eindeutige Antwort geben. Dazu solltest du dich über deine eingesetzte Entwicklungsplattform informieren.



  • OK dann nochmals...

    Aktueller stand.

    Header.cpp

    #ifndef KFZ_H_INCLUDED
    #define KFZ_H_INCLUDED
    
    #include <iostream>
    
    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
    

    KFZ.cpp

    #include <iostream>
    #include "KFZ.h"
    
    using namespace std;
    
    // Konstruktor
    
    KFZ::KFZ(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;
    }
    

    Die Fehlermeldung lautet: undefined reference to KFZ::Show()

    Ich nutze Windows 8 und Codeblocks....



  • Damit kann man schonmal was anfangen.

    In deinem Header (ich vermute mal dass es sich nicth um Header.cpp sondern um KFZ.h handelt) hat der Konstruktor geschweifte Klammern, es handelt sich also um eine Definition, nicht um eine Deklaration! (In der FAQ steht genau, was der Unterschied ist). Der Konstruktor, wie er im Header definiert wurde, macht allerdings nicht viel - genauer gesagt garnichts.

    KFZ.cpp scheint in deinem Projekt garnicht mit eingebunden zu werden. Der Compiler/Linker findet beim Übersetzen den Konstruktor aus dem Header (nicht den aus der KFZ.cpp). Die Methode Show() findet er nicht.
    Würdest du KFZ.cpp bei dem aktuellen Stand in das Projekt mit reinbinden, bekämst du zwar den Fehler wegen der fehlenden Referenz nicht, stattdessen aber einen Fehler, weil du zweimal einen Konstruktor definiert hast (einmal im Header, einmal in der KFZ.cpp).

    Die Lösung ist also zweiteilig:

    1. Binde die KFZ.cpp in dein Projekt mit ein.
    2. Entferne die geschweiften Klammern beim Konstruktor in KFZ.h

    und dann alles nochmal übersetzen.



  • Zwei Dinge:

    (1) Das Klammernpaar {} innerhalb der Klassendefinition hinter dem Konstruktor muss weg. Du willst das Ding da ja nur deklarieren, nicht definieren.

    (2) Wie ich bereits schon fragte: Bist du dir sicher, dass KFZ.cpp überhaupt kompiliert wird und dessen Kompilat mitgebunden wird? Wenn Du nicht weißt, was ein Linker ist, solltest du das mal recherchieren.

    Edit: Da war einer schneller 😉



  • Ich kenne CodeBlocks nicht, aber ich gehe mal davon aus, das du auch dort über die Oberfläche Projekte anlegen und diesem dann die Dateien hinzufügen kannst. Der Compiler kennt deine cpp-Datei nicht automatisch durch ein Include. Es gibt eine Projektdatei (wenn man mit einer IDE arbeitet, editiert man diese aber selten per Hand) in der alle Dateien des Projektes bekannt gegeben werden, damit der Compiler/Linker weiß welche er verwenden soll.



  • *Die Lösung ist also zweiteilig:

    1. Binde die KFZ.cpp in dein Projekt mit ein.
    2. Entferne die geschweiften Klammern beim Konstruktor in KFZ.h*

    Zu 1) Wieso ist diese nicht durch die #include "KFZ.h" eingebunden?

    Mein Projekt besteht aus KFZ.h KFZ.cpp und main.cpp

    den Grund das er diese nicht findet kann ich also garnicht verstehen.

    1. Diese Klammern habe ich bereits entfernt.

    Bzgl dem Konstruktor hab ich jetzt auch schon in vielen Tutorials gesehen das der schon so aussehen kann ... wie wäre diese den richtig=?



  • Wo ist denn der Facepalm-Smiley? Warum ignorierst du meine Posts?
    Hättest du meine (unsere) Tipps beachtet, hättest du auf die Lösung schon vor 20 Posts selber kommen können.



  • das ist echt zum ausrasten hier

    ich habe nun mit #include "KFZ.cpp"

    diese auch in der main inkludiert.. nun gibt's die Fehlermeldung:

    error: Verbrauch10Km was not declared in this scope...

    wieso das bitte mit den andern variablen hat er ja auch keine Probleme.



  • Danke erstmals [Rewind] dennoch funktoniert das noch nicht so ganz bei mir.

    gr.heiko@googlemail.com könntest du mir evtl mal deine Kontaktdaten geben?

    hätte einen Auftrag für dich.



  • Heiko, sei geduldig und beharrlich. Alles ist am Anfang schwierig. Beherzige nur die Tipps, die du hier bekommst, und irgendwann macht's Klick.
    Ich biete gerne Hilfe zur Selbsthilfe an, nehme aber keine Aufträge an.



  • HeikoGrue schrieb:

    #include "KFZ.cpp"

    NIEMALS cpp-Dateien inkludieren (Es gibt zwar Ausnahmen, aber wann du selbst Templates schreibst, und ob du jemals dort trennst, ist eine andere Frage). Inkludieren hat nichts mit Einbinden in das Projekt zu tun. Die Dateien müssen der Projektdatei hinzugefügt werden. Wie das geht ist wie gesagt abhängig von der Entwicklungsumgebung.

    Und nein, die Lösung ist NICHT alles in eine Datei einzufügen. Man trennt sauber.



  • HeikoGrue schrieb:

    error: Verbrauch10Km was not declared in this scope...

    wundert mich nicht. Normalerweise wird der Verbrauch nämlich nicht pro 10km angegeben.



  • Die Sache ist hier die Kommunikation ist einfach schwierig

    Das ganze funktioniert in einer cpp Datei,
    wenn ich das aber eben in Header kfz.cpp und dann noch main.cpp spalte funktioniert leider nichts mehr.

    in der Header Datei sollte doch alle Methoden vordefiniert werden also auch der Konstruktor oder .. und dann in der Unterklasse mit einem include der Header Datei eingebunden werden? mit Kfz::Kfz binde ich ja den Konstruktor.



  • Das schlimme ist eben ich bin noch kein Schritt weiter leider.

    Ich habe überall die Header Datei inkludiert.. und in dem Projektordner sind alle diese Dateien enthalten.

    #ifndef KFZ_H_INCLUDED
    #define KFZ_H_INCLUDED
    
    #include <iostream>
    
    class KFZ
    {
        public:
    
        // Konstruktor
    
        KFZ(int nTankgr,double nVerbrauch100Km,double nTankinhalt,double nKmStand,double nGewicht);
    
        void Show();
    
        private:
    
        int Tankgr;
        double Verbrauch100Km;
        double Tankinhalt;
        double KmStand;
        double Gewicht;
    
    };
    
    #endif // KFZ_H_INCLUDED
    
    #include <iostream>
    #include "KFZ.h"
    
    using namespace std;
    
    // Konstruktor
    
    KFZ::KFZ(int nTankgr,double nVerbrauch100Km,double nTankinhalt,double nKmStand,double nGewicht):
        Tankgr(nTankgr), Verbrauch100Km(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;
    

    [code="cli"]

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

    using namespace std;

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

    Audi.Show();

    return 0;
    }
    [code="cpp"]

    in der main wieder der Fehler:

    nicht definierte Referenz auf KFZ::Show();



  • HeikoGrue schrieb:

    Das schlimme ist eben ich bin noch kein Schritt weiter leider.

    Und ob du das bist. Ersetze den Konstruktor in der Klassendefinition durch deinen Konstruktor in KFZ.cpp (Zeilen 9-10) und schon hast du einen sauberen Code. Das heißt, die Fehler danach müssten nur noch vom Linker kommen. Sie wären der nächste Schritt. Verwendest du vielleicht Code::Blocks?

    @asc: das mit Inkludieren der cpp war ein Tipp von jemandem von uns.



  • Ich verstehe das nicht genau also mir wurde immer nahe gebracht das ich in der Header Datei die konstruktoren angebe wie auch variablen.... und das habe ich ja in dem fall richtig gemacht oder nicht==?? und ja genau das nutze ich


Anmelden zum Antworten