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. */
    }
    


    1. du compilierst den C-Code mit einem C-Compiler (nicht mit dem C++-Compiler).
    2. du bindest den C-Header, umgeben von einer extern "C" -Deklaration in die nötigen C++-Übersetzungseinheiten ein.
    3. du kompilierst die C++-Sachen mit dem C++-Compiler
    4. du linkst alles zusammen - sollte dann klappen.

Anmelden zum Antworten