带有 OO 的模板导致未解决的外部符号问题
Template with OO caused unresolved external symbol issue
我没有.cpp文件,因为我正在使用模板。但我仍然遇到了未解决的外部符号问题。有谁知道原因吗?非常感谢,如果你能帮助我。
template<class T>
class SQLiteHelper
{
public:
static SQLiteHelper<T>* getInstance(T* factory)
{
if (NULL == m_sInstance)
{
m_sInstance = new SQLiteHelper<T>(factory);
}
return m_sInstance;
}
private:
SQLiteHelper<T>(T* factory) { m_factory = factory; }
private:
static SQLiteHelper<T>* m_sInstance;
sqlite3* m_database;
T* m_factory;
std::string m_dbPath;
};
当我打电话时,就会出现问题:
AudioItem item;
AudioDBHelper<AudioItem>::getInstance(&item);
问题:
error LNK2001: unresolved external symbol "private: static class SQLiteHelper<class AudioItem> * SQLiteHelper<class AudioItem>::m_sInstance" (?m_sInstance@?$SQLiteHelper@VAudioItem@@@@0PAV1@A)
它是类中的静态变量。您只在标头中声明它,但您还需要在 cpp 文件中定义它。这意味着您必须在 cpp 中包含模板静态成员。
例如,在您的 cpp 文件中执行以下操作:
template <class T>
SQLiteHelper<T>* SQLiteHelper<T>::m_sInstance;
您必须使用 .cpp 文件才能正常工作;在哪里并不重要,但编译器必须能够找到静态模板实例的定义。
相关文章:
- 节俭并发:未解决的外部问题
- 未解决的外部链接问题
- Visual Studio 2017 中的 QtMetaObject 未解决的外部错误
- 在Embarcadero C++ Builder中生成的DLL未解决的外部链接错误
- 解释未解决的外部C++
- 矛盾的未解决的外部符号+未使用的库与VS2017和FFMPEG 4
- 函数路径追加上未解决的外部符号错误
- Lapack函数DGTSV通过C /Visual Studio提供未解决的外部符号
- 运算符过载上未解决的外部符号
- qfilesystemwatcher未解决的外部
- C 未解决的外部符号(公共静态INT)
- MIDL COM库中未解决的外部符号
- 未解决的外部符号sf ::带有SFML的时间
- C++编译错误LNK2019:未解决的外部符号错误
- VTK / ITK/ QT - 未解决的外部符号错误 (LNK2001)
- 未解决的外部包括AUX_KLIB内核库
- 单一实例对象的未解决外部符号链接错误
- 导出类静态常量的未解决外部符号链接错误(仅限某些项目)
- C++非常简单的未解决外部
- 如何纠正不一致的未解决外部错误