繁体   English   中英

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

[英]Invoking static function from process defined in library

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

题:

我不能在库中定义的过程中调用静态函数吗?

示例: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

定义api::getinstance不匹配的declations api::getinstance 您缺少api::getinstance定义上的返回类型。

更改为: api* api::getinstance()

并从类声明的末尾删除api

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM