[英]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.