我想要一个对象内部的静态 vector ,它存储指向曾经构造的每个对象的指针,这样我就可以运行一个循环遍历每个对象。
//Object.h
public:
Object();
stuff();
static vector<Object*> objects;
//Object.cpp
vector<Object*> Object::objects;
Object::Object(){ objects.push_back(this); }
Object::stuff(){ /*Do stuff*/ }
我希望它能工作:
//ObjectB.cpp
Object::objects[0]->stuff();
当我运行它时,出现“访问冲突读取位置 0xCCCCCCCC”错误。
最佳答案
假设“ObjectB”类继承了“Object”类,那么您的 Object.h 和 Object.cpp 就可以了。
// Object.h
static vector<Object*> objects; // [Is this correct?][1]
-> OK,静态成员声明
// Object.cpp
vector<Object*> Object::objects; // [Is this correct?][1]
-> 好的,静态成员初始化(在你的 cpp 文件中)
// Object.h
vector<Object*> Object::objects; //[error C2838][2]
-> 这是不对的,我假设 ObjectB 继承了 Object,你不必声明它。要引用您的静态成员,您只需执行“Object::objects”。不要忘记从您的 ObjectB 构造函数调用您的 Object 构造函数,否则您的 ObjectB 实例将不会添加到您的 Object::objects vector 中:
// ObjectB.cpp
ObjectB() : Object() // Calling Object() will add your instance to "objects" vector
{
...
}
然后:
Object::objects.stuff(); // or with ->, i.e. Object::objects->stuff()
-> 这应该有效(如果您没有忘记从 ObjectB 构造函数调用 Object 构造函数)。
对于“是否有另一种方法来跟踪所有对象”这个问题,嗯,这取决于您要实现的目标。
关于对象构造函数访问中对象的 C++ 静态 vector ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26173725/