实例的静态集合
Static Collection of Instances C++?
我有一个类Phone,我想要它,创建时将自己添加到电话的静态集合。我有一个集合:
static vector < class Phone* > instances;
在构造函数中我这样做:
Phone::instances.push_back(this);
但是链接器抛出了一个无法解析的外部符号,这是为什么?我做错了什么?我没有找到类似的问题。有必要在构造函数之外添加实例吗?还是我必须在另一个类上收集?非常感谢。
必须在类之外声明静态成员。
标题:
class Phone{
...
static vector < class Phone* > instances;
...
};
在你的cpp中,你需要创建它的实例:
//on global or namespace scope
vector <Phone*> Phone::instances;
另外,只是一个旁注,不是对您的问题的直接回答,最好有一个"std::shared_ptr"的向量,而不是原始指针。但是如果你是std::shared_ptr的一个向量,你将不能把"this"添加到那个向量中,所以你必须在你的类中再添加一个东西,它将能够访问std::shared_ptr封装的类中的"this"。你可以这样做:
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;
相关文章:
- 处理多个异常集合的C++方法
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 给定n个元素的m个集合.在C++中找到出现在最大集合数中的元素
- #为""定义宏;静态";针对不同的上下文
- cmake如何在fedora工作站中找到boost静态库包
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 将公共但非静态的成员函数与ALGLIB集成
- cmake在我的项目中所需的所有静态库都不成功
- C++从另一个类访问公共静态向量的正确方法是什么
- 如何将ampl中的集合表示为c++中的向量
- 基于boost的程序的静态链接——zlib问题
- 检查值是否在集合p1和p2中,但不在p3中
- 带过滤器的现代迭代c++集合
- 在静态库中嵌入类方法
- 如何将结构插入到集合中并打印集合的成员
- Qt C++静态thread_local QNetworkAccessManager是线程应用程序的好选择吗
- 集合上的输出迭代器:assign和increment迭代器
- 实例的静态集合
- 在类中使用静态集合来存储类
- 如何使用另一个类的静态集合初始化集合