尝试访问由进程链接的共享库类中定义的静态函数。静态函数来创建实例,以便该类是单例。
问题:
我可以不在库中定义的进程中调用静态函数吗?
实施例: 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
答案 0 :(得分:1)
api::getinstance
的定义与api::getinstance
的分词不匹配。
您在api::getinstance
的定义中缺少返回类型。
将其更改为:
的 api*
强> api::getinstance()
并从类声明的末尾删除api
。