Guten Mittag,
ich habe das Problem in Eclipse, dass von meinem C++ Klassen nur jene
verwendet werden können, welche nicht in Header und Source Dateien
getrennt sind.
Genauer gesagt, wenn ich per #include einen Klassen-Header einfüge kann
ich nur jene Methoden verwenden, welche direkt im Header auch
definiert+deklariert sind.
Jene Methoden, welche in einer Sourcedatei deklariert werden, werfen den
undefined-reference Fehler.
In den Projekteinstellungen ist als Source-Verzechnis das entsprechende
Verzeichnis bereits eingestellt.
Kann mir jemand helfen? Danke!
Zeige mal den Quellcode, insbesondere die Source-Dateien, und mach einen
Screenshot vom Projektaufbau (Project explorer) in eclipse, und zeig die
komplette(!) Ausgabe des Compilers.
In die Header-Datei gehört die Deklaration einer Klasse: Wie heißen die
Member, wie heißen die Methoden.
In die cpp-Datei gehört die Implementierung der Klasse, also der Code
der beim Aufruf der Methoden ausgeführt werden soll. Alle
Sourcecode-Dateien, die eine bestimmte Klasse verwenden wollen,
inkludieren die Header-Datei jener Klasse.
Eichhörnchen schrieb:> folgendes benutze;#include "testklasse.cpp"> dann funktioniert der Code.
Das ist aber furchtbar falsch. Sobald dein Projekt wächst geht das
schief.
Eichhörnchen schrieb:> int main(void) {
Das "void" ist überflüssig.
Zeig einen Screenshot von eclipse und den kompletten Build-Log...
Du benutzt ein Makefile mit automake. Das Problem hat also nichts mit
eclipse zu tun, sondern damit dass du deine testklasse.cpp nicht in die
Makefile.am eingetragen hast. Wenn du ein normales eclipse C++ Projekt
anlegst brauchst du so etwas nicht zu tun, dann kompiliert eclipse
automatisch alle .cpp Dateien im Projekt.
Eichhörnchen schrieb:> Tatsache. Kann ich dort etwas eintragen wie, oder muss ich ab jetzt jede> Source Datei von Hand dort eintragen:>>
1
> Test_SOURCES = *.cpp
2
>
Ein entschiedenes "kommt darauf an".
Wenn in deinem Projekt(*) Buildvarianten sind, hast Du von dir selbst
bestimmte Kriterien, welche Quellcodedateien bei welchem Builddurchlauf
dazugehören.
Z.B. UnitTest Quellcode habe ich gerne gleich bei den eigentlichen
Quelldateien, gehört aber definitiv nicht in den Buildrun der
production deliverable Binaries baut.
(* habe das Wort "Projekt" schon ziemlich über: damit ist in jeder Ecke
wieder was Anderes gemeint... Grrr!)
Dr. Sommer schrieb:> Eichhörnchen schrieb:>> folgendes benutze;#include "testklasse.cpp">> dann funktioniert der Code.> Das ist aber furchtbar falsch. Sobald dein Projekt wächst geht das> schief.>> Eichhörnchen schrieb:>> int main(void) {> Das "void" ist überflüssig.
Das ist zwar jetzt off-topic:
In C bedeutet main() eine Funktion mit beliebiger (!) Parameterliste,
und main(void) eine mit leerer Parameterliste.
In C++ bedeutet main() eine Funktion mit leerer Parameterliste.
Da main() lt. Standard genau die beiden möglichen Signaturen
1) main() / main(void)
2) main(int, char**)
hat, ist also main() in C falsch. Denn es bedeutet ja eine beliebige
Parameterliste, und bspw. ein main(double) ist nicht zugelassen bzw.
wird nicht als Startpunkt des User-Codes interpretiert.
s.a.
http://en.cppreference.com/w/c/language/main_functionhttp://en.cppreference.com/w/c/language/function_declaration
Ok, das war jetzt etwas Erbsenzählerei ....
Eichhörnchen schrieb:> Tatsache. Kann ich dort etwas eintragen wie, oder muss ich ab jetzt jede> Source Datei von Hand dort eintragen:>>
1
> Test_SOURCES = *.cpp
2
>
Man muss halt sehen, dass alle Implementierungsdateien kompiliert und
gebunden werden (damit man die ODR nicht verletzt). Wie das bei welcher
IDE wie geschieht ... ?
Eichhörnchen schrieb:> Tatsache. Kann ich dort etwas eintragen wie, oder muss ich ab jetzt jede> Source Datei von Hand dort eintragen:> Test_SOURCES = *.cpp
Ja, man muss jede .cpp-Datei hinschreiben.