C++类的向量,不能在所述类的构造函数内部push_back
C++ Vector of classes, can't push_back inside constructor of said class
所以这是我的问题,我想要一个类的对象向量,然后我可以将其传递给其他类供使用。
我希望向量在该类的构造函数中添加类的实例。因此,我已经在类成员和构造函数中设置了一个静态向量
当前有两个类别的类,一个是事件处理程序类,每次左键单击时都会创建一个"障碍"类的实例(我想要的矢量)。
(我省略了无关的代码)
class MyEventReceiver: public IEventReceiver
{
private:
blah blah
public:
blah blah
virtual bool OnEvent (const SEvent& event){
if(left click)
Obstacle obs(scn,randX,randY,randR);
}
}
障碍:
class Obstacle
{
private:
static std::vector<Obstacle> *obs;
public:
Obstacle(scene::ISceneManager*, float, float, float);
~Obstacle();
};
障碍CPP:
std::vector<Obstacle> *Obstacle::obs;
Obstacle::Obstacle(scene::ISceneManager* scn, float x, float y, float radius)
{
//get and set the passed in params blah blah
obs->push_back(this);
}
这不起作用,但希望您能看到我要实现的目标。稍后,我想要一个函数,该函数将返回对obs的引用,以便其他类可以调用此功能并访问向量进行操作和读取它。
- 没有
obs
作为指针,没有必要。 -
obs
被声明为对象的向量。this
是指向对象的指针,因此您必须将push_back
称为obs->push_back(*this);
您确实想更改向量,以便通过指针存储它们,而不是通过价值来存储它们,因为您不想在其中副本:
static std::vector<Obstacle*> *obs;
请记住要从destructor中的该向量中删除实例:
Obstacle::~Obstacle()
{
auto iter = std::find(obj->begin(), obj->end(), this);
if (iter != obj->end())
{
obj->erase(iter);
}
}
您还需要编写一个添加它的复制构造函数。如果您不这样做,那么您将无法跟踪副本(假设您允许):
Obstacle::Obstacle(const Obstacle& rhs)
// ... initialise from rhs
{
obs->push_back(this);
}
您的向量被声明为错误。应该是
static std::vector<Obstacle*> obs;
即。指针的向量。您所拥有的是指向向量的指针。
假设您的目标是维护所有构造障碍物的指针向量,那么您还必须声明复制构造函数(复制的障碍物对象也需要添加到您的向量)和destructor(应该应该添加到destructor(应该应该)从矢量中删除对象)。这不会有效,但可能可以满足您的需求。
相关文章:
- 我不明白为什么我声明一个空的内部结构并将其传递给构造函数
- 为什么从另一个构造函数内部调用C++构造函数不修改类变量?
- C++构造函数具有内部链接,但未定义 [-Wundefined-internal]
- 班级成员在C Lambdas中捕获内部构造函数
- 用相同的参数将内部和外部构造函数分开
- 如何在类构造函数内部对同一类的成员函数启动pthread
- C++类的向量,不能在所述类的构造函数内部push_back
- C :如何通过其构造函数的参数初始化类内部矩阵的尺寸
- 在shared_ptr的复制构造函数内部
- 从构造函数中本地声明的device_vector使用device_vector::data()方法初始化结构内部的指针是
- 如何正确地从运算符构造函数内部调用复制构造函数
- gcc 4.7.3与构造函数一起使用make_shared时出现内部编译器错误
- 如何谷歌奇怪的字符,例如"~"内部问题,例如在构造函数之前的 c++ 中这意味着什么?
- 我应该在类构造函数内部还是外部初始化shared_ptr
- "this"指针在构造函数内部指向什么C++?
- dynamic_cast派生构造函数内部
- C++在子类内部调用基类构造函数
- 在boost::thread构造函数内部调用boost:;bind()时发生编译器错误
- 将内部构造函数切换为受保护的 typemap
- Qt:连接内部构造函数-将槽在对象初始化之前被调用