C++ shared_ptr基于单调导致链路错误的原因
C++ shared_ptr based singletone what causes link error?
所以我尝试以下代码:
#ifndef TRANSMITTER_H
#define TRANSMITTER_H
class connector
{
public:
static boost::shared_ptr<connector> Instance(){
if(!instance)
{
instance = boost::shared_ptr<connector>(new connector());
}
return instance;
}
private:
connector(){}
static boost::shared_ptr<connector> instance;
};
#endif //TRANSMITTER_H
但是得到链接错误:
Error 3 error LNK2001: unresolved external symbol "private: static class boost::shared_ptr<class connector> connector::instance" (?instance@connector@@0V?$shared_ptr@Vconnector@@@boost@@A)
我想退货shared_ptr有什么问题?我可以让它成为函数范围的静态变量吗?
static boost::shared_ptr<connector> instance;
类定义中只是一个声明。你似乎没有对它的定义。此定义在类定义之外。
但是,您可能更喜欢这样做:
class connector
{
public:
connector(connector const&) = delete;
connector& operator=(connector const&) = delete;
static boost::shared_ptr<connector> Instance()
{
static boost::shared_ptr<connector> instance (new connector);
return instance;
}
private:
connector(){}
};
在这种情况下,instance
被定义为内联函数定义中的静态函数本地对象 Instance
。这样做的好处是,这种初始化在 C++11 中保证是线程安全的。
你应该
定义
boost::shared_ptr<connector> connector::instance;
在您的*.cpp这使得链接器在静态数据区域中为此静态成员分配内存。
您必须在类声明之外定义静态成员。定义如下所示:
boost::shared_ptr<connector> connector::instance;
它应该在cpp中,因为您可能是发射器.cpp
相关文章:
- vscode g++链路故障:体系结构x86_64的未定义符号
- Netbeans 10:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)
- 为什么我在空指针错误(链表)中获取成员访问权限
- GLFW DDS 加载函数的 OpenGL 链路错误
- CMake 错误:链接器命令失败,退出代码为 1 和 cpp.o 文件
- clang:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用) - 体系结构的未定义符号 x86_64:
- 如何修复 clang: 错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)
- QBS 为静态链路 MSVC 创建静态库
- Android NDK.Build命令失败.未定义的引用.clang++:错误:链接器命令失败,退出代码为1
- 使用cmake错误链接boost日志
- 错误:链接器命令失败,退出代码为 1(使用 -v 查看调用):在 Macbook 上
- C++ XCODE ld:找不到体系结构x86_64 clang 的符号:错误:链接器命令失败,退出代码为 1(使用 -
- VS 链路错误描述中的"@@YAHXZ"是什么意思?
- 提升单元测试链路错误
- C++ shared_ptr基于单调导致链路错误的原因
- MPG123 链路错误"_read"和"_lseek"
- 在VS2012中使用时出现log4cplus链路错误
- Parasoft c++测试链路单元测试错误
- Boost Asio GCC链路错误
- 成员上的非静态链路错误C2352