C und C++ mag nicht linken?



  • Hallo,

    ich habe im Internet einen schönen C-Code gefunden habe, der Testinstanzen für ein Bin Packing Problem generiert, und diese dann löst. Nun will ich anhand dieser Testinstanzen meinen eigenen ALgorithmus den ich in C++ geschrieben habe testen, nur mag das irgendwie nicht so wie ich. Dazu muss ich sagen, dass ich mittlerweile zwar in das Coden reingearbeitet habe, aber nicht wirklich so den Durchblick habe, was beim Linken passiert. Dabei gibts aber den Fehler und ich bin ziemlich ratlos.
    Hier mal den main-Teil des C-Codes, bei dem die FUnktion zum Lösen des Problems aufgerufen wird. Ich habe einfach meine Funktion so angepasst, dass sie genauso aufgerufen werden kann.

    int main(int argc, char *argv[])
    {
      int v, n, mindim, maxdim, fillpct, maxtyp;
      item *f, *l;
      int W, H, D, cvol, vol, miss;
      item tab[MAXITEMS];
      int w[MAXITEMS], h[MAXITEMS], d[MAXITEMS]; 
      int x[MAXITEMS], y[MAXITEMS], z[MAXITEMS], k[MAXITEMS];
      double time, sumtime, sumfill, sumn, summiss;
      char s[100];
    
        /* now do the packing */
        timeused(NULL);
        contload(n, W, H, D, w, h, d, x, y, z, k, &vol);
        timeused(&time);
    
      return 0; /* correct termination */
    }
    

    Der eigentliche COde ist länger, habe aber hier der Übersichtlichkeit einiges rausgenommen, wo ich dachte, dass es eh unwichtig ist.

    Also ich hoffe, mir kann jemand helfen, oder braucht man da noch mehr Infos ? Ich bin wirklich gerade total auf dem SChlauch..

    Vielen Dank,
    CHrissi



  • Kannst bitte die fehlermeldung des linkers posten sonst können wir nur ins blaue raten
    mfg



  • ohja sorry, hatte ich ganz vergessen:

    [Linker Fehler] Unresolved external '_contload' referenced from D:\DATEN\DA\MEINE DATEN\PISINGER_DATA\TESTCONT.OBJ

    Ich benutze Borland c++ Builder 6, falls das noch irgendetwas zur Sache beiträgt



  • post das mal im borland c++ forum



  • Ich glaube

    Testcount.cpp ist die datei wo die main funktion steht!?

    also daher vermute ich das du nicht alle nötigen cpp datein im projekt hinzugefügt hast !
    mfg



  • ja genau, testcont ist die Datei mit der mainfunktion, habe ich aber dem Projekt zugefügt. habe ich gerade nochmal gecheckt..



  • Ich hab gmeint du musst die datei hinzufügen, die die funktion >>contload<< behinhaltet (kA wie die heisst kann leider nicht auf deine festplatte schaun) 😃

    mfg



  • ich habe beide drinnen.. testcont.c (die mit der main) und container.cpp ( die mit contload)

    kann es irgendwie an dem c und cpp liegen ?
    Ich habe wirklich ueberhaupt keine ahnung..

    lg und vielen dank!
    Chrissi



  • CChrissi schrieb:

    [Linker Fehler] Unresolved external '_contload' referenced from D:\DATEN\DA\MEINE DATEN\PISINGER_DATA\TESTCONT.OBJ

    übernimmt contload parameter? wenn ja, und wenn diese datei von einem c-compiler bearbeitet wird heißt das, dass man die alte c-namensgebung hat.
    so, und jetzt nochmal im klartext 😉
    c würde eine "contload(int i)"-funktion so übersetzen (iirc): _contload
    c++ so: _contload_int

    d.h. du müsstest das schlüsselwort "extern" verwenden, damit der auf c++ eingestellte linker auch die funktion dann findet.

    mfg



  • ja, daran dürfte es wohl liegen.. es werden ein haufen parameter übernommen. wo muss ich denn dann das "extern" verwenden?
    Sorry, das sind genau die ecken wo ich mich noch gar nicht auskenne..

    lg,
    Chrissi



  • CChrissi schrieb:

    ja, daran dürfte es wohl liegen.. es werden ein haufen parameter übernommen. wo muss ich denn dann das "extern" verwenden?

    extern "C" int area(int x, int y);
    

    siehe auch:
    extern @MSDN

    mfg



  • Wo muss ich das genau hinschreiben.. vor die main funktion ? oder die contload ? aber die ist ja in c++ ?
    oder ganz an den anfang des c_files ?

    Lg,
    Chrissi



  • CChrissi schrieb:

    Wo muss ich das genau hinschreiben.. vor die main funktion ? oder die contload ? aber die ist ja in c++ ?

    ka. habe es selber nie verwendet und im moment kann ich das problem auch nicht nachvollziehen.
    einfach bei msdn nachlesen.

    mfg



  • ich glaub ich habs jetzt, habe die main in die c++ funktion geschrieben und da dann alle anderen funktionen als extern "c" deklariert. jetzt läufts zumindest mal 🙂 Mal schaun obs auch das richtige liefert!

    Nochmals vielen lieben Dank !!

    Chrissi 🙂


Anmelden zum Antworten