Fehler?
-
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
-
wäre es möglich diese Unterhaltung mal über einen messager zu tätigen=`?
-
HeikoGrue schrieb:
Die Lösung ist also zweiteilig:
- Binde die KFZ.cpp in dein Projekt mit ein.
- Entferne die geschweiften Klammern beim Konstruktor in KFZ.h
Zu 1) Wieso ist diese nicht durch die #include "KFZ.h" eingebunden?
Nein. Das ist ja nur der Header. #include macht nichts magisches. Es sorgt nicht automatisch dafür, dass kfz.cpp kompiliert wird. #include fügt nur den Text, der in der angegebenen Datei steht, an die Stelle der include-Direktive ein. Du musst schon noch CodeBlocks beibringen, dass es kfz.cpp neben main.cpp auch kompilieren soll. Das geht irgendwo über die Target-Einstellung. Du musst halt sagen, dass zu deinem Debug/Release-Target noch die kfz.cpp dazu gehört. Wenn du die in diesem Dialog nicht auswählen kannst, dann ist die Datei noch nicht Teil des Projekts und muss hinzugefügt werden. Wenn das richtig eingestellt ist, wird CodeBlocks 2mal den Compiler aufrufen, einmal mit main.cpp und einmal mit kfz.cpp. Daraus werden dann main.o und kfz.o (die Objektdateien) und die werden dann mit dem Linker gebunden (main.o+kfz.o -> deinprogramm.exe). So funktioniert "getrennte Übersetzung". Unbedingt auch in dem C++ Buch deines Vertrauens nachlesen, was eine "Übersetzungseinheit" ist und was die "one definition rule" ist. Wichtig. Unbedingt lesen. Überhaupt sind schlaue C++ Bucher extremst praktisch. Man kann sich viel Zeit und Ärger ersparen, wenn man "C++ richtig" lernt.
-
[Rewind] schrieb:
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.
Würde ich nicht machen. Für mich sind auch Initialisierungslisten schon Implementierungsdetails die in die cpp-Datei gehören. Grundsätzlich mache ich keine Implementierungen in der Headerdatei (Ausnahme Templates).
HeikoGrue schrieb:
...und in dem Projektordner sind alle diese Dateien enthalten...
Ich hoffe das du mit Projektordner nicht nur das Verzeichnis auf der Festplatte, sondern wirklich das Projekt meinst.
HeikoGrue schrieb:
@asc: das mit Inkludieren der cpp war ein Tipp von jemandem von uns.
Dann war es ein verdammt schlechter Tipp. Nur weil jemand etwas schreibt, heißt das nicht, das es sinnvoll wäre.
Wobei ich auch nicht verstehe warum Variablen unbedingt abgekürzt werden müssen (zumindest bei Tankgr frage ich mich zuerst einmal für was das gr steht, dann lieber Fassungsvermoegen). Und zudem warum man Parametern ein "n" vorwegstellt - was soll das bedeuten? Das sind aber nicht wirklich "Fehler"... Jeder soll mit dem Stil zurechtkommen, den er selbst wählt, oder den ein Projekt vorgibt.
-
Also ist der Code Fehlerfrei...
Leider kann ich die Einstellung nicht finden indem ich die cpp hinzufüge.
In Java macht die Vererbung ja noch sinn^^
In dem Projekt ist die Datei auf jeden fall da ich nur die Projektdatei aufrufe und dann eben alle diese cpp und Header Datei auch im Programm habe.
-
In Code::Blocks im Menü Project gehst du auf Add Files ... und wählst alle .cpp-Dateien aus die du für dein Project/Programm brauchst.
-
die habe ich doch bereits in dem Projekt .....
-
Beim Hinzufügen zum Projekt fragt er dich auch, zu welchen Targets die gehören. Vielleicht hast du da vergessen, die Targets anzuklicken. Das kannst du aber auch noch nachholen. In C::B kann ein Projekt nämlich mehrere "Targets" enthalten.
Jetzt bin ich erst mal ne Weile Stil. Mein Erklärungskontingent ist ausgeschöpft.
-
*Münze nachwerf*
-
Hallo wie bin leider immer noch nicht weiter.... er sagt mir immer KFZ sei keine klasse oder Namespace obwohl diese im Header vorhanden ist
???
-
Moin.
Hast du mal versucht das ganze per GCC auf der Kommandozeile zu kompilieren?
Dann siehst du wenigstens, ob es an deiem Code liegt, oder an einer Einstellung in deiner IDE.g++ -o $NAME main.cpp KFZ.cpp