Hallo zusammen,
ich benötige eure Hilfe.
Es geht um ein C++ programm.
Und zwar folgendes, wir haben ein fertiges Programm bekommen mit zwei
Klassen usw.
Nun sollen wir die Klassen in einzelne Dateien packen.
Also für jede Klasse eine eigene Datei mit header.h
Das ist auch soweit kein Problem, nur hat er den Konstruktor außerhalb
der Klasse definiert und da liegt mein Problem.
Was mache ich jetzt damit, kommt dieser Code nur in die .cpp oder nur in
die header datei?
Es funktioniert einfach nicht.
Hier der Code, bei dem ich nicht weiß wohin ich deiesen tun muss.
helpme91 schrieb:> Was mache ich jetzt damit, kommt dieser Code nur in die .cpp oder nur in> die header datei?
Normalerweise steckt man ihn in die .cpp-Datei.
> Es funktioniert einfach nicht.
Wie äußert sich das? Was genau hast du versucht?
Die Implementierung (definition) des Konstruktors kommt in die .cpp
Datei. In die .h Datei kommt die Deklaration (der Funktionsprototyp für
den Konstruktor).
Ich habe jetzt den Code in der .cpp
Bis zum kompilieren zeigt er auch keine Fehler an.
Nach dem kompilieren kommen einige Fehlermeldungen, siehe Bild.
Zusätzlich sagt er bei allen Variablen die in:
Ja, include ist drinnen.
Sonst würde ich sofort eine Fehlermeldung bekommen vor dem kompilieren.
Ich darf den Code leider nicht posten, da er nicht von mir ist.
helpme91 schrieb:> Hallo zusammen,>> ich benötige eure Hilfe.>> Es geht um ein C++ programm.> Und zwar folgendes, wir haben ein fertiges Programm bekommen mit zwei> Klassen usw.
Und ihr sucht Idioten, die für euch die Hausaufgaben machen.
Das habe ich ja auch in der header-Datei für die Klasse Block.
Nur steht der Code den ich hier schon öfters gepostet habe außerhalb der
Klasse Block.
Deshalb ja auch: Block::Block(....) usw.
Dies muss ja bestimmt auch in der header angegeben werden?
Ich bin in diesem bereich ganz neu und mache das zum ersten Mal.
helpme91 schrieb:> Das habe ich ja auch in der header-Datei für die Klasse Block.
Dann sollte es funktioneren. So wie Thilo das beschrieben hat ist das
genau richtig. Wenn's trotzdem nicht klappt dann liegt der Grund
woanders ...
LG, Sebastian
helpme91 schrieb:> Ich bin in diesem bereich ganz neu und mache das zum ersten Mal.
So what? Ich musste meine Hausaufgaben auch immer selber machen. Und es
waren immer Sachen, in deren Bereich ich ganz neu war. So ist das
nunmal, wenn man etwas lernt.
Sozusagen ein ganz typisches Lernproblem. Und das wirst du (langfristig)
nicht lösen, indem du dir Vollidioten suchst, die dir die fertige Lösung
liefern.
Lerne, du faules Stück!
Fehler 2011 heißt, für den Compiler wird da Block erneut definiert. Der
Compiler erkennt nicht, dass
Block::Block(int id, String s) {}
die Implementierung zu
class Block {
public:
Block(int id, String s);
};
ist.
Mögliche Gründe:
- die Deklaration passt nicht zur Definition
ist die Signatur wirklich gleich? vielleicht einmal int und einmal long
int?
- die Klassendefinition ist nicht abgeschlossen
kommt da ein Semikolon nach der Klasse? Únd keins nach dem Konstruktor?
helpme91 schrieb:> @Kaj>> Genauso habe ich es gemacht.
Umschreibe doch mal bitte nicht, wie du es gemacht hast, sondern zeige
den tatsächlichen Code, der bei dir nicht funktioniert. Und ich meine
nicht einen Auszug von drei Zeilen, die wahrscheinlich den Fehler gar
nicht enthalten, sondern ein komplettes Programm, mit dem ich das bei
mir nachvollziehen kann.
Es bringt einfach nichts, wenn dir jemand erzählt, wie du es machen
musst, und du sagt: "Ja, genau, so habe ich es gemacht, aber es geht
nicht". Wie soll man dir da helfen?
Hallo nochmal,
das Programm funktion.
Die Lösung: Projekt neu erstellt, danach hat alles wunderbar
funktioniert.
Ich habe den Code einfach mal auf meinem zweiten PC in ein neues Projekt
eingefügt und da hat es sofort funktioniert.
Danach habe ich am anderen PC ein komplett neues Projekt erstellt und es
hat funktioniert.
Die cpp und header Dateien habe ich vom alten übernommen.
Keine Ahnung, was mit dem alten Projekt nicht in Ordnung war.
Nochmals vielen Dank für die Hilfe!!
Hilft zwar nur bedingt weiter, aber ich habe mir angewöhnt, bei
mysteriösen Problemen und immer mal wieder aus Prinzip einen make clean
durchzuführen. Da bekommt man dank Cache auch mal wieder alle warnings
gezeigt...