Avatar billede petermjensen Nybegynder
16. januar 2004 - 18:56 Der er 10 kommentarer og
1 løsning

Fra c til c++

Jeg har siddet og leget med et lille binært træ.
Virker fint.. Men nu kunne jeg godt tænke mig at migerer det til c++:
Jeg har en funktion der allokerer træet og kører den "medhængende" funktion.
Problemet er den ikke vil linke i cpp:
Funktionen:

zAVLTree *zAVLAllocTree (zAVLKey (*getkey)(void const *item))

Den "medhængende funktion:

/* Function to return the argument */
const void *identity (void const *arg)
{
  return (const void *) arg;
}


Kaldet af funktionen:
avltree = gAVLAllocTree(identity);

Den fejler i linking.
I Windows sætter den __cdecl ind ..

Fejlmeddelse:

error LNK2019: unresolved external symbol "struct zAVLTree * __cdecl zAVLAllocTree(void const * (__cdecl*)(void const *))" (?zAVLAllocTree@@YAPAUzAVLTree@@P6APBXPBX@Z@Z) referenced in function "void __cdecl lookup(void)" (?lookup@@YAXXZ)

Jeg har leget lidt med Extern "C" og __cdecl (i win) men det vil simpelthen bare ikke?
Avatar billede arne_v Ekspert
16. januar 2004 - 19:02 #1
Det er ikke bare fordi du har oversat 2 .cpp filer separat og mangler at linke
med den ene .obj fil ?
Avatar billede petermjensen Nybegynder
16. januar 2004 - 19:05 #2
Hej igen :o)

Nej.. Det virker som det skal (Har både fået visual studio og kdevelop til at generer mine makefiler :o))
Avatar billede arne_v Ekspert
16. januar 2004 - 19:08 #3
Hvad er zAVLKey ?

Funktionen kaldes med en funktion som skal returnere sådan en (men identity
returnerer faktisk void *).
Avatar billede petermjensen Nybegynder
16. januar 2004 - 19:16 #4
Det er en const void*:
typedef const void *zAVLKey;
Avatar billede petermjensen Nybegynder
16. januar 2004 - 19:19 #5
Det er en key til selve træet.
Den kommer til at indeholde char* .. Men det er fordi jeg prøvet på ALLE mulige underlige mådet, til at få det til at fungere :o)
Avatar billede arne_v Ekspert
16. januar 2004 - 19:27 #6
Og det er en slag fejl at du kalder gAVLAllocTree men definerer
zAVLAllocTree ?
Avatar billede arne_v Ekspert
16. januar 2004 - 19:36 #7
Vi skal se noget mere kode !

Følgende compiler nemlig hos mig:

typedef const void *zAVLKey;
typedef char *zAVLTree;

zAVLTree *zAVLAllocTree (zAVLKey (*getkey)(void const *item))
{
    return (char **)0;
}

const void *identity (void const *arg)
{
  return (const void *)arg;
}

int main()
{
  char **avltree = zAVLAllocTree(identity);
  return 0;
}
Avatar billede petermjensen Nybegynder
16. januar 2004 - 20:15 #8
He.. nu bliver jeg i tvivl om de implamentationer jeg har lavet osse kan være en årsg :o(
Men ihvertfald virker det ikke.

Jeg har brugt dette:
http://www.cosine.org/project/AVLTree/
(Z træet)
Avatar billede petermjensen Nybegynder
16. januar 2004 - 21:33 #9
ja, det er med at finde ud af, extern c.. hmm underligt..
Pyt skidt.. nu virker det.
arne_v vil du ikke lige ligge et svar, så jeg kan takke dig for at prøve at hjælpe ;o)
Avatar billede arne_v Ekspert
16. januar 2004 - 21:36 #10
ok
Avatar billede petermjensen Nybegynder
16. januar 2004 - 21:44 #11
tak, endnu engang :o)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester