如何从类中访问和初始化std :: list

时间:2016-02-15 17:50:27

标签: c++ list class initialization

我的问题可能很愚蠢,但我遇到了以下问题。

下面一段代码就可以了。我有全局或本地列表,可以正确实例化和推送值。

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)

我不知道如何初始化列表。任何指针都会有所帮助。

2 个答案:

答案 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;