我有一个类Phone,我想要它,在创建时将自己添加到静态手机集合中。所以我有这个系列:
static vector < class Phone* > instances;
在构造函数中我这样做:
Phone::instances.push_back(this);
但链接器会抛出一个未解析的外部符号,为什么会这样?我究竟做错了什么?我没有找到类似的问题。是否有必要在构造函数外添加实例?或者我必须在另一个班级上收集?非常感谢你。
答案 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;