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
    }
    #endif
    

    benutze, 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


Anmelden zum Antworten