我没有.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)
答案 0 :(得分:3)
这是你班上的静态变量。您只需在头文件中声明它,但您还需要在cpp文件中定义它。这意味着您必须在cpp。
中包含模板静态成员E.g。在你的cpp文件中执行以下操作:
template <class T>
SQLiteHelper<T>* SQLiteHelper<T>::m_sInstance;
你必须使用.cpp文件才能工作;它在哪里并不重要,但编译器必须能够找到静态模板实例的定义。