我的问题可能很愚蠢,但我遇到了以下问题。
下面一段代码就可以了。我有全局或本地列表,可以正确实例化和推送值。
class THistory
{
public:
UInt32 index;
UInt32 navToID;
};
//Works Fine
class ML{
public:
static THistory *hist2;
};
main.cpp;
ML::hist2 = new THistory[HISTORY_BUFFER_SIZE];//global
std::list<THistory> histList;//global
histList.push_back(ML::hist2[0]);//inside main()
当我在班级中移动列表时,问题就开始了。
//Problem
class ML{
public:
static THistory *hist2;
static std::list<THistory> histList; //replace global list and put it inside ML class as static
}
main.cpp;
ML::hist2 = new THistory[HISTORY_BUFFER_SIZE];//global as before
////// Where to initialize the list?
ML::histList.push_back(CoreML::hist2[0]); //inside main()
//LINK Error Undefined symbol
错误LNK2001:未解析的外部符号&#34; public:static class std :: list&gt; CoreML :: histList&#34; (?histList @ @@ CoreML 2V?$列表@ @@ VTHistory V'$分配器@ VTHistory @@@ STD @@@ STD @@ A)
我不知道如何初始化列表。任何指针都会有所帮助。
答案 0 :(得分:0)
在C ++中,如果在类中声明静态成员变量,则需要在某处放置该变量的定义。您获得的链接器错误是因为您声明了变量,但您没有定义它。
在程序的一个C ++源文件中,添加以下行:
std::list<THistory> CoreML::histList; // Define the variable.
答案 1 :(得分:0)
在类定义中,仅声明静态数据成员。您必须在类定义之外定义它们。例如
class ML{
public:
static THistory *hist2;
static std::list<THistory> histList; //replace global list and put it inside ML class as static
};
^^^
// before the function main
std::list<THistory> ML::histList;