gpt4 book ai didi

c++ - 静态函数的单例类 dlopen 错误(无法在示例代码中重现)!

转载 作者:行者123 更新时间:2023-11-28 04:31:15 24 4
gpt4 key购买 nike

我无法以一种很好且紧凑的形式来重现我在目标应用程序中遇到的问题,但我已经写下了我用于 mysingleton 的类定义,这让我很伤心,我希望有人也许可以指导我找到解决方案。好的,问题是,我的应用程序返回一个运行时错误,如下所示:打开请求的库时出错 (/path/to/./libcloudparc.sys.db_connector.so) dlopen() 错误:/path/to/./libcloudparc.sys.db_connector.so: undefined symbol: _ZN7db_pool8instance 其中 db_pool 是我的单例类,如下所示:

class someclA {
public:
someclA(int,int,int){}
~someclA(){}
};
class db_pool : public someclA {
private:
static db_pool *inst;
db_pool(int &A,
int &B,
int &C): someclA(A,B,C){}
public:
static db_pool *getInstance(int &a,
int &b,
int &c) {
if(!inst) {
inst = new db_pool(a,b,c);

inst->init(a,b,c);
}
return inst;
}
int init (int ,int,int);
};

int main (void) {
int A=11;
int B=22;
int C=33;
db_pool *inst = inst->getInstance(A,B,C);
}

为什么我会收到上述错误?有人可以帮助我取得成功吗?

最佳答案

如果一个类中的变量是static,那么它将属于该类的所有实例,而不是只属于一个实例。所以它需要先定义。而且您只能对该变量有一个定义。所以它必须放在类声明之外的源文件(不是头文件)中。你需要做这样的事情:

db_pool * db_pool::inst = nullptr; //for a start

关于c++ - 静态函数的单例类 dlopen 错误(无法在示例代码中重现)!,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52827364/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com