C library in C++ (verse)
-
Hi. Ich würde gerne ein C-Library in C++ verwenden, nur leider macht da der Compiler nicht mit. Es handelt sich um verse.
Ich habe versucht dieses beispiel hier zu compilieren:
http://verse.blender.org/coding-intro/arne@arne-laptop:~/Desktop$ gcc verse.c -lverse -o v1 arne@arne-laptop:~/Desktop$ g++ verse.c -lverse -o v1 verse.c: In function »int main()«: verse.c:34: Fehler: ungültige Umwandlung von »void* (*)(VNodeID, const char*, uint8*)« in »void*« verse.c:34: Fehler: Argument 1 von »void verse_callback_set(void*, void*, void*)« wird initialisiert verse.c:34: Fehler: ungültige Umwandlung von »void (*)(void*, uint32, void*, void*, const uint8*)« in »void*« verse.c:34: Fehler: Argument 2 von »void verse_callback_set(void*, void*, void*)« wird initialisiert verse.c:35: Fehler: ungültige Umwandlung von »void (*)(VNodeID, VNodeType, VNodeOwner)« in »void*« verse.c:35: Fehler: Argument 1 von »void verse_callback_set(void*, void*, void*)« wird initialisiert verse.c:35: Fehler: ungültige Umwandlung von »void (*)(void*, VNodeID, VNodeType, VNodeOwner)« in »void*« verse.c:35: Fehler: Argument 2 von »void verse_callback_set(void*, void*, void*)« wird initialisiert arne@arne-laptop:~/Desktop$wie man sieht gibt es mit dem c-compiler absolut keine probleme, aber c++ klappt nicht.
Hat einer von euch eine Ahnung, wie ich die library trotzdem verwenden kann?hier noch mal der quelltext:
/* A minimalist Verse example. Ask server for nodes, print information. * * Last updated on 2005-08-26. */ #include <stdio.h> #include <stdlib.h> #include "verse.h" /* Bring in the Verse API. */ /* A callback for connection acceptation: will be called when server accepts this client. */ static void callback_connect_accept(void *user, uint32 avatar, void *address, void *connection, const uint8 *host_id) { uint i, mask = 0; printf("Connected to a Verse host!\n\nListing nodes:\n"); /* Build node subscription mask, include all node types. */ for(i = 0; i < V_NT_NUM_TYPES; i++) mask |= 1 << i; verse_send_node_index_subscribe(mask); /* Request listing of all nodes. */ } /* A callback for node creation: is called to report information about existing nodes, too. */ static void callback_node_create(void *user, VNodeID node_id, VNodeType type, VNodeOwner owner) { printf(" Node #%u has type %u, owner %s\n", node_id, type, owner == VN_OWNER_MINE ? "me" : "someone else"); } int main(void) { /* Register callbacks for interesting commands. */ verse_callback_set(verse_send_connect_accept, callback_connect_accept, NULL); verse_callback_set(verse_send_node_create, callback_node_create, NULL); /* Kick off program by connecting to Verse host on local machine. */ verse_send_connect("My_name", "My_password", "localhost", NULL); while(TRUE) verse_callback_update(100); /* Listen to network, get callbacks. */ return EXIT_SUCCESS; /* This is never reached. */ }
-
- du compilierst den C-Code mit einem C-Compiler (nicht mit dem C++-Compiler).
- du bindest den C-Header, umgeben von einer
extern "C"-Deklaration in die nötigen C++-Übersetzungseinheiten ein. - du kompilierst die C++-Sachen mit dem C++-Compiler
- du linkst alles zusammen - sollte dann klappen.