C++:单一实例类模板导致链接错误
C++: Singleton class template causes linking error?
我试图创建一个单例(基本)类:
template<typename SUBCLASS>
class Singleton {
public:
static SUBCLASS& get_instance() {
static SUBCLASS instance;
return instance;
}
};
此单例类位于头文件中,该文件可以包含在任何其他文件中。 例如,一个类可能看起来像这样:
class MyClass : public Singleton<MyClass> {
public:
...
private:
MyClass() {
}
friend Singleton<MyClass>;
}
其他地方MyClass
可以像这样使用:
MyClass& instance = MyClass::get_instance();
优点:编译有效。不好的一点:链接失败。
错误消息是:
undefined reference to `MyClass::get_instance()'
我做错了什么?有人提示吗?
非常感谢
此致敬意
凯文
您可以使用
using
关键字:
class MyClass : public Singleton<MyClass> {
public:
using Singleton<MyClass>::get_instance;
...
private:
MyClass() {
}
friend Singleton<MyClass>;
}
这会将函数拉入MyClass
的范围。
对我来说
编译得很好。
#include <iostream>
template<typename SUBCLASS>
class Singleton {
public:
static SUBCLASS& get_instance() {
static SUBCLASS instance;
return instance;
}
};
class MyClass : public Singleton<MyClass> {
public:
private:
MyClass() {
}
friend Singleton<MyClass>;
};
int main()
{
using namespace std;
MyClass& a = MyClass::get_instance();
return 0;
}
编译方式:
c++ singleton.cpp
在编译过程中,可以省略未引用的静态方法。可以通过在同一编译单元中引用该方法或通过更改特定于编译器的优化设置来解决此问题。
另一种方法可能是显式实例化模板,如下所示:
template class Singleton<MyClass>;
相关文章:
- 静态数据成员的问题-修复链接错误会导致编译器错误
- Visual Studio mkl_link_tool.exe链接错误
- C++ 实现模板单例类时出现链接错误
- 使用类模板的方法链接错误
- MySQL C++连接器链接错误
- VS 2015 链接错误 无法构建依赖于 libcurl 的项目
- 运行 C++ 单元测试时LNK2005链接错误
- 对 CMake 中'cudaRegisterLinkedBinary'链接错误的未定义引用?
- 链接错误,包括我创建的相同头文件 - C++
- 在Embarcadero C++ Builder中生成的DLL未解决的外部链接错误
- 使用标头保护的多个定义链接错误
- 链接错误:未定义对 stdscr 和 wgetch 的引用
- 使用 Vivek 的 Vcam / 捕获源过滤器构建/链接错误
- 升压program_options中的链接错误
- 使用 g++ 预处理器进行替换会导致链接错误
- 在调试配置中编译工作正常,但发布会给出链接错误
- 相邻矩阵设置链接错误
- 包含常量变量并包含在多个文件中的标头的链接错误
- C++链接错误,我理解但无法解决
- 是什么导致macOS Mojave上的GoogleTest链接错误