![]() |
![]() |
|
![]() |
![]() |
|
Programmierung Rat & Tat für Programmierer |
![]() |
|
Themen-Optionen | Ansicht |
![]() |
#1 |
Senior Member
![]() |
![]() Hi. Ich programmiere in C++ und möchte eine Funktion aus einer eigenen Headerdatei aufrufen und zwar wie folgt:
Ich hab eine lmmin.c, lm_eval.h Datei mit gcc -c lmmin.c -o lmmin.o kompiliert (in lmmin.c steht #include "lm_eval.h") Jetzt möcht ich in C++ eine Funktion aus lmmin.c aufrufen. Mein Problem ist, dass ich das Ganze in C schon gelöst hab, wenn ich jedoch die Funktion aus lmmin.c aus einer Methode meiner Klasse aufrufe, dann gibts: undefined reference to ... Ich hoffe, ich hab das Problem so einigermaßen beschreiben können Lg Stefan
____________________________________
Nur die Übung trennt das Außergewöhnliche vom Gewöhnlichen |
![]() |
![]() |
![]() |
#2 |
Hero
![]() Registriert seit: 04.09.2001
Beiträge: 894
|
![]() hi,
du musst entwedr die .h Datei in deiner .cpp includen oder die aufgerufene Funktion als external deklarieren. fg hannes |
![]() |
![]() |
![]() |
#3 |
Senior Member
![]() |
![]() Ich hab die .h Datei bereits inkludiert.
Das Komische ist, dass ich in meinem C Programm das Ganze schon zum Laufen gebracht habe. Wenn ich jedoch die Bibliotheksfunktion in meiner Klasse aufrufe (möcht das C Programm einfach auf C++ portieren), dann funktionierts nicht. Muss ich eigene Bibliotheksfunktionen in Klassen anders aufrufen?
____________________________________
Nur die Übung trennt das Außergewöhnliche vom Gewöhnlichen |
![]() |
![]() |
![]() |
#4 |
bitte Mailadresse prüfen!
Registriert seit: 17.03.2002
Beiträge: 198
|
![]() Das Einzige, was mir einfällt:
gcc compiliert nur C, während g++ für C++ zuständig ist (zumindest bin ich bis jetzt immer davon ausgegangen). Ein Unterschied ist z.B. das "name mangling" des C++ Compilers, das verwendet wird, um überladene Funktionen eindeutig zu kennzeichen. Deswegen wird er deine Funktion wahrscheinlich auch nicht finden. Wenn du die Funktionen als C Funktionen exportieren willst, könntest du sie in einen extern "C" Block einschließen. z.B. extern "C" { void func1() { } } |
![]() |
![]() |
![]() |
#5 |
Inventar
![]() Registriert seit: 04.11.2001
Alter: 45
Beiträge: 2.150
|
![]() Du musst die Funktion bzw. Datei einkompilieren, oder damit verlinken...
Code:
mike@honeybadger:~/devel/testimonials$ g++ -o ex++ ex++.cxx ex.c mike@honeybadger:~/devel/testimonials$ ./ex++ Hello World mike@honeybadger:~/devel/testimonials$ cat ex.c #include <stdio.h> int foo(void) { printf("Hello World\n"); return 0; } mike@honeybadger:~/devel/testimonials$ cat ex++.cxx int foo(void); // oder header incl. class FooClass { public: FooClass() { (void) foo(); } }; int main(int argc, char **argv) { FooClass *foo = new FooClass(); delete foo; return 0; }
____________________________________
LOL - Mein erstes Post im Programmier Forum MACINTOSH - Most Applications Crash, If Not The Operating System Hangs |
![]() |
![]() |
![]() |
#6 |
Senior Member
![]() |
![]() hmmm,.... ich hab folgendes:
lm_eval.h schaut so aus: lm_minimize(...); lm_evaluate(...); ... lm_eval.c schaut dann so aus: #include "lm_eval.h" ... void lm_minimize (...) { ... } ... lm_evaluate(...) { } das Gleiche gibts dann nochmals für lmmin.h und lmmin.c und fit1.cpp #include "lmmin.h" #include "lm_eval.h" #include <stdio.h> class something { public: something(void) { lm_minimize(); } }; int main(void) { something a; } so, Fehlermeldung: undefined reference to function lm_minimize(); at line irgendwas
____________________________________
Nur die Übung trennt das Außergewöhnliche vom Gewöhnlichen |
![]() |
![]() |
![]() |
#7 |
Inventar
![]() Registriert seit: 04.11.2001
Alter: 45
Beiträge: 2.150
|
![]() g++ -o prog fit1.cpp lm_eval.c ?
~
____________________________________
LOL - Mein erstes Post im Programmier Forum MACINTOSH - Most Applications Crash, If Not The Operating System Hangs |
![]() |
![]() |
![]() |
#8 |
Senior Member
![]() |
![]() nö, geht auch nicht:
Hier hab ich mal folgendes gemacht (nur zur Demonstartion) gcc -c lmmin.c -o lmmin.o gcc -c lm_eval.c -o lm_eval.o gcc lm_test.c lmmin.o lm_eval.o -o lm_test Funktioniert!! Und jetzt: cp lm_test.c lm_test.cpp gcc -g lm_test.cpp lmmin.o lm_eval.o -o lm_test Fehlermeldung: Undefined reference to lm_evaluate(...) , usw.
____________________________________
Nur die Übung trennt das Außergewöhnliche vom Gewöhnlichen |
![]() |
![]() |
![]() |
#9 |
Senior Member
![]() |
![]() g++ liefert gleiches Ergebnis
____________________________________
Nur die Übung trennt das Außergewöhnliche vom Gewöhnlichen |
![]() |
![]() |
![]() |
#10 |
Senior Member
![]() |
![]() OK, Problem gelöst. mit g++ fit1.cpp lm_eval.c ... gehts doch
Interessanterweise funktioniert g++ fit1.cpp lm_eval.o ... nicht gcc fit1.c lm_eval.o aber schon hmmm, naja, mit dem beschäftige ich mich später. Thx jedenfalls
____________________________________
Nur die Übung trennt das Außergewöhnliche vom Gewöhnlichen |
![]() |
![]() |
![]() |
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
|
|