Fehler beim Linken LNK2019
-
hi
erst mal vielen dankfürdie schnelle Antwort. Die Unterstriche zu Beginn der Funktionsnamen in den Fehlermeldungen sind nicht von mir. Das wurde in der Fehlermeldung einfach so ausgegeben. Und wie muss ich dass jetz machen? exter "C" {} um die ganze header-Datei?
-
pitaz schrieb:
Und wie muss ich dass jetz machen? exter "C" {} um die ganze header-Datei?
Nein, denn C kann mit extern "C" nichts anfangen ;).
Mach das um die Funktionsdefinitionen in der .cpp-Datei (oder schreib es einfach vor jede Funktionsdefinition).
-
Hallo
Ok, habe jetzt um die Funktionsdefinitionen ein extern "C" gemacht.
Also so:#include "../so/dld.h" #include "../hd/ge_types.h" #include <iostream> #include <vector> #include <string> #include <fstream> #include <cstdio> #include <cmath> using namespace std; const double pi = 3.14159265; // Pi //Private Variables vector< vector<double> > dld_Mat; // Matrix with Temperature and corresponding material properties fstream infile; string s; double dld_Mu0 = 4*pi*1.e-7; // magnetic constant [H/m] //noch mehr variablen werden initialisiert und definiert extern "C"{ int geth(double x, double t, double *h) { //blabla } int get_dld_Mat() { //blabla } int get_Qv_ind(double x, double r, double t, double T, double *Qv_ind) { //blabla } }Jetzt bekomme ich diese Fehlermeldung:
c:\dld\pf_2d_mod\so\dld.cpp(114) : error C2732: Bindungsangaben widersprechen vorheriger Angabe für 'geth'
c:\dld\pf_2d_mod\so\dld.cpp(113): Siehe Deklaration von 'geth'
c:\dld\pf_2d_mod\so\dld.cpp(153) : error C2732: Bindungsangaben widersprechen vorheriger Angabe für 'get_dld_Mat'
c:\dld\pf_2d_mod\so\dld.cpp(152): Siehe Deklaration von 'get_dld_Mat'
c:\dld\pf_2d_mod\so\dld.cpp(239) : error C2732: Bindungsangaben widersprechen vorheriger Angabe für 'get_Qv_ind'
c:\dld\pf_2d_mod\so\dld.cpp(238): Siehe Deklaration von 'get_Qv_ind'
-
In die Headerdatei muss das extern "C" auch. Wenn du diese header-Datei auch von C-Dateien aus verwenden möchtest (Was ich jetzt aber nicht annehme), kannst du dir mit folgendem Trick behelfen:
#ifdef __cplusplus extern "C" { #endif .... Funktionsdeklarationen hier #ifdef __cpluspus } #endif
-
Btw, warum machst du denselben Thread in 2 Foren auf? Oo
-
Wie mienst du:
[quote "Decimad"]
In die Headerdatei muss das extern "C" auch. Wenn du diese header-Datei auch von C-Dateien aus verwenden möchtest
[/quote]Ich muss doch die Header-Datei von C-Dateien aus benutze um C++-Funktionen einer anderen Datei in de C-Datei verwenden zu können. Wie macht man denn standardmässig eine Schnittstelle zwischen C und C++?
Wenn ich in der Header Datei das
#ifdef __cplusplus extern "C" { #endif .... Funktionsdeklarationen hier #ifdef __cpluspus } #endifbenutze, bekomme ich über 100 Fehlermeldungen von denen die miesten so:
error C2894: Vorlagen können nicht mit 'C'-Bindung deklariert werden
aussehen
-
Da sollen auch wirklich nur die 3 Funktionsdeklarationen rein, sonst nix!
-
Hallo, du meinst in der C-Datei. Nein, die C-Datei ist sehr umfangreich (ca. 2300 Zeilen). Ich brauche einfach an einigen Stellen diese 3 Funktionen, die in einem seperaten File in C++ geschrieben sind.
-
Ich wollte damit sagen, du sollst das nicht "um die ganze Headerdatei" drummachen, sondern nur um die Deklaration dieser 3 Funktionen in der Headerdatei. C kennt keine Klassen oder Templates, darum gibts auch keine C-kompatiblen Symbolnamen dafür....
-
Ja, Es sind nur 3 C++-Funktionen die ich in einem C-Code verwenden will