从库中定义的进程调用静态函数

时间:2015-03-14 16:56:48

标签: c++

尝试访问由进程链接的共享库类中定义的静态函数。静态函数来创建实例,以便该类是单例。

问题:

我可以不在库中定义的进程中调用静态函数吗?

实施例:     library_file.h

 class api{

   public:

  static api* getinstance();

private:

    static api* mapi;

}api;

api::getinstance()
{
    if (mapi == 0)
    mapi =  new mapi();

     return mapi;
}

链接到上述库的示例流程失败:

#include "library_file.h"

int main()
{
   api *obj = api::getinstance();
}

编译错误:对api :: getinstance()的未定义引用

但链接到上述库的此示例流程运行正常:

#include " library_file.h"

int main()
 {
    api obj;
 }


Edited:    
          Compiler output:
       D:/MyApplication/host/win32/x86/usr/bin/qcc -Vgcc_ntoarmv7 -Wl,
       --no- keep-memory  -lang-c++ -lang-c++    -o

      D:/MyApplication/Api_Library/testapp/arm/o-le-v7/testapp    testapp.o   
        -L . -L 

        D:/MyApplication/Api_Library/testapp/target/qnx6/usr/lib -L 
        D:/MyApplication/target/qnx6/armle-v7/lib -L 
        D:/MyApplication/target/qnx6/armle-v7/usr/lib  -Wl,--rpath-link . -
         Wl,--rpath-link 

        D:/MyApplication/Api_Library/testapp/target/qnx6/usr/lib -Wl,--
        rpath-link 

        D:/MyApplication/target/qnx6/armle-v7/lib -Wl,--rpath-link 
        D:/MyApplication/target/qnx6/armle-v7/usr/lib    -Bdynamic    -
        lApi_Library   -EL          

        testapp.o: In function `main':

        testapp.cpp:(.text+0x8): undefined reference to `api::getinstance()'
        cc: D:/MyApplication/host/win32/x86/usr/bin/ntoarm-ld caught signal 
          1

        make.exe[2]: *** [D:/MyApplication/Api_Library/testapp/arm/o-le-
          v7/testapp] Error 1

1 个答案:

答案 0 :(得分:1)

api::getinstance的定义与api::getinstance的分词不匹配。 您在api::getinstance的定义中缺少返回类型。

将其更改为: 的 api* api::getinstance()

并从类声明的末尾删除api