klasse in verschiedenen Dateien (Problem beim Linken)

HI, also ich bin ziemlicher Anfänger, benutze Dev-C++ auf Windows XP und hoffe ihr könnt mir helfen.

Ich habe jetzt das erste mal versucht mit verschiedenen Dateien zu arbeiten.

Also die Klassendefinition in eine Header-Datei, die Implementierung der Methoden in eine .cpp-Datei (?) und dann in einem unabhängigen Programm mit #include darauf zugreifen.

Der Code macht mir auch gar keine Probleme. Wenn ich dann das letztendliche Programm kompilieren will, gibt es Probleme mit dem Linking, denn er kennt die Funktionen nicht. Offensichtlich hat er zwar die Funktionen im Header gefunden, weiss aber nicht was sie machen sollen.

Also wie muss ich mit der .cpp Datei (?) umgehen in der ich die Methoden implementiere damit der Header sie findet?

Vielen Dank schon mal!

Domz
 
Ein paar infos mehr waeren gut.
Aber versuch mal sie in das gleiche verzeichniss zu legen.
Was fuer einen Compiler benutzt du?
Wie genau lautet die Fehlermeldung?
mfg

sw33t
 
was für infos?

compiler? oh weh. Der der bei dev-c++ dabei war. mingw? kann des sein?
Im gleichen Verzeichnis sind alle Dateien.

Fehlermeldung vom Hauptprogramm:

[Linker error] undefined reference to `Grundstueck::Grundstueck()'

und das halt durch mit allen Funktionen der Klasse

Fehlermeldung wenn ich versuche Implementierungsdatei zu kompilieren (muss ich das überhaupt oder holt sich der Compiler die Informationen aus der Datei wenn ich das Hauptprogramm kompiliere?):

[Linker error] undefined reference to `WinMain@16'
ld returned 1 exit status


Es geht hauptsächlich darum wie ich die drei Dateien Grundsätzlich behandeln muss. Z.B. müssen die beiden Klassendateien die gleichen Namen haben, mit welchen Dateinamenänderungen, muss ich beim kompilieren etwas beachten, bzw. was muss ich explizit kompilieren und was sucht sich der compiler selbst,...

Hört sich wahrscheinlich alles ziemlich noobig an, aber ich hab nichts gefunden was mein Problem beschreibt, weil es ja nicht wirklich mit Code zu tun hat. Den hab ich ja.
 
Hast du die Dateien einfach so erstellt oder hast du explizit Project erstellen ausgewaehlt?
 
einfach so einzeln erstellt. War das der Fehler?
Aber wie kann ich dann erstellte Klassen sonst in anderen Projekten anwenden?
 
Du musst die .cpp datei zu deinem Projekt hinzufügen, damit die mitcompiliert und gelinkt wird.
Du kannst aber auch das 2te Projekt als dll compilieren und beim Hauptprogramm angeben, dass die Funktionen in der dll sind.

Der Grund, warum der Linker die Fehlermeldung:
[Linker error] undefined reference to `WinMain@16'
bringt ist der, dass du das 2te Projekt als exe compilierst, aber keine Hauptfunktion(main,WinMain) dabei ist.
 
ja danke jetzt funktionierts :) super! danke!
Das mit der dll lass ich aber lieber mal noch. ;)

ja das mit der main hät ich draufkommen müssen. wusst aber net ob er versucht es als exe zu kompilieren oder ob er erkennt was ich will.

Aber angenommen ich will diese Klasse jetzt in einem anderen Projekt auch verwenden, gibt es dann keine Möglichkeit die Klasse einfach per #include verfügbar zu machen? Oder sind Dateien die ich mit #include aufrufe dlls? sorry für solche fragen.
 
nein sind keine dlls
wenn du aus deinem 2.ten Projekt eine dll oder lib machst kannst dus fast alleine mit include machen, du musst nur noch dem linker sagen, in welcher lib die funktionen sind bzw. in welcher dll.
Bei Dev-C++ geht das unter Projekt->Projekt Optionen(Alt+P)->Zusätzliche Kommandozeilen Optionen:->Linker. Wie man eine lib bzw. dll macht kannst du dir in Dev-C++ bei den Beispielen anschauen.
 
ok danke. ich dachte nur, es müsste alles über code machbar sein. Hatte gelesen, dass man eigentlich mit jedem Textverarbeitungsprogramm, welches dateien ohne formatierungen schreiben kann (.txt), prinzipiell coden kann. man braucht dann nur nen compiler.

aber ich denk ich komm jetz erstmal wieder ne weile klar.

Vielen Dank nochmal!
 
jop das ist fast richtig. Im Code kann man zum Beispiel nicht sagen, wie eine bestimmte Datei compiliert werden soll(zum Beispiel als c oder cpp datei). Das macht man mit makefiles oder übergibt dem Compiler bestimmte Parameter.
Das mit dem makefile erstellen macht in deinem Fall Dev-C++ für dich. Das makefile könntest du natürlich auch selbst schreiben mit einem Editor.
 
Dann muss ich doch nochmal fragen: generell will ich ja c++ von Grund auf lernen. Meint ihr es wäre sinnvoll von Anfang an zu lernen solche makefiles selbst zu schreiben, oder reicht es, sich damit später zu befassen und sich jetzt auf die nötigen Sachen zu konzentrieren?
 
Zurück
Oben