gpt4 book ai didi

对象构造函数访问中对象的 C++ 静态 vector ?

转载 作者:行者123 更新时间:2023-11-30 04:00:43 29 4
gpt4 key购买 nike

我想要一个对象内部的静态 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*/ }

Is this correct?

我希望它能工作:

//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/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com