静态集合实例C ++?

时间:2014-07-09 20:30:14

标签: c++ collections constructor static instances

我有一个类Phone,我想要它,在创建时将自己添加到静态手机集合中。所以我有这个系列:

static vector < class Phone* > instances;

在构造函数中我这样做:

Phone::instances.push_back(this);

但链接器会抛出一个未解析的外部符号,为什么会这样?我究竟做错了什么?我没有找到类似的问题。是否有必要在构造函数外添加实例?或者我必须在另一个班级上收集?非常感谢你。

2 个答案:

答案 0 :(得分:3)

您必须在班级外声明静态成员。

在标题中:

class Phone{
...
static vector < class Phone* > instances;
...
};

在您的cpp中,您需要创建它的实例:

//on global or namespace scope
vector <Phone*> Phone::instances;

答案 1 :(得分:0)

另外,只是旁注,而不是直接回答你的问题,最好有一个&#34; std :: shared_ptr&#34; s的向量,而不是原始指针。但是如果你是std :: shared_ptr的向量,你将无法添加&#34;这个&#34;进入那个向量,所以你必须在你的班级中添加一个能够访问&#34;这个&#34;在您的类中包装在std :: shared_ptr中。您可以这样做:

class Phone : public std::enable_shared_from_this<Phone>
{
    static vector<std::shared_ptr<Phone>> instances;
}

//then somewhere in your code:
Phone::instances.push_back(shared_from_this());

在你的.cpp文件中:

vector<std::shared_ptr<Phone>> Phone::instances;