1. We have moved from vBulletin to XenForo and you are viewing the site in the middle of the move. Though the functional aspect of everything is working fine, we are still working on other changes including the new design on Xenforo.
    Dismiss Notice

static library using virtual methods

Discussion in 'C' started by kilombo, Aug 31, 2009.

  1. kilombo

    kilombo New Member

    Joined:
    Aug 31, 2009
    Messages:
    3
    Likes Received:
    0
    Trophy Points:
    0
    Hi,

    I'm trying to create a static lib.

    This lib needs to read/write to a db, but the library has no information about db (type, pass, etc).

    The idea is to create an interface that the library client will fill to provide to the library DB stuff.


    ------------------------- class IDBProvider --------------------------------------
    #include "IDBResult.h"

    using std::string;


    class IDBProvider{
    public:
    virtual IDBResult * executeSQLCommand(string command);
    };

    ------------------------- class IDBResult --------------------------------------

    class IDBResult{
    public:

    /**
    * Retrieves the value of the designated column in the current row of this object
    * as a long.
    */
    virtual long getLong(string columnLabel);

    /**
    * Retrieves the value of the designated column in the current row of this object
    * as a int.
    */
    virtual int getInt(string columnLabel);
    };


    ----------------------------- staticLibImplementation.h ----------------------

    #include #include "IDBProvider.h"
    bool doLibraryStuff(long *result, IDBProvider db);

    ----------------------------- staticLibImplementation.cpp ----------------------

    bool doLibraryStuff(long *result, IDBProvider db){
    db.executeSQLCommand("A_QUERY_TO_DB");
    }


    I'm creating the library as follows :

    g++ -Wall -g -c -o libDB.o staticLibImplementation.cpp
    ar rcs libDB.a libDB.o


    It compiles ok, but if I do a "nm libDB.a" I can see that:

    U _ZN11IDBProvider17executeSQLCommandESs

    So IDBProvider::executeSQLCommand is undefined.


    Then , if I try to compile a test that uses libDB.a, at linking phase complains about unreferenced symbols.


    The q├╝estion is: Can I create different interfaces like this and use it in a static lib? I'm new in c++ (I come from java) and I don't really don't know about this. How I should compile it?

    Thanks in advance.
     

Share This Page