Klassen in eigene Datei schreiben

Gast #6722783
Lesenswert?

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.
1
Block::Block(int id, String s) {
2
  //......
3
}
Gast #6722818
Lesenswert?

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:
1
Block::Block(int id, String s) {
2
  //......
3
}

stehen, nichtdeklarierter Bezeichner.
Angehängte Dateien:
Gast #6722855
Lesenswert?

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.
Gast #6722862
Lesenswert?

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!
Gast #6722865
Lesenswert?

Header:
1
#ifndef CLASS_BLOCK_H
2
#define CLASS_BLOCK_H
3

4
class Block {
5
    public:
6
        Block(int id, String s);
7
};
8

9
#endif

Cpp:
1
#include "Class_Block.h"
2

3
Block::Block(int id, String s)
4
{
5

6
}
Hast du die Dateien auch in das Buildsystem eingetragen (cmake, make, 
oder was auch immer du nutzt)?
Beitrag #6722874 wurde von einem Moderator gelöscht.
#6722903
Lesenswert?

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?
#6722933
Lesenswert?

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?
Gast #6723695
Lesenswert?

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!!
Gast #6723710
Lesenswert?

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...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren