在其类中声明对象
Declaring an object within its class
我正在尝试将弹跳气泡处理示例移植到C++(使用OpenFrameworks)中,但我遇到了一些障碍。 在类的定义中:
class Ball {
float x, y;
float diameter;
float vx = 0;
float vy = 0;
int id;
Ball[] others;
...
void collide() {
for (int i = id + 1; i < numBalls; i++) {
float dx = others[i].x - x;
float dy = others[i].y - y;
float distance = sqrt(dx*dx + dy*dy);
...
它看起来像对象,"其他"正在其自己的类中声明。 我尝试将Ball others(<arguments>);
添加到我的C++类中,但XCode愤怒地向我闪烁,并留下一条控制台消息威胁要吃掉我未来的孩子,所以我一定做错了什么。 我想这可能是一个Java/处理的事情 - 但我对C++类很陌生。
有没有办法在C++中完成同样的事情,或者我只是最好通过一些修改将碰撞函数移出类并进入 testApp 类?
你需要有一个指针而不是一个数组:
...
Ball *others;
...
不能在类定义中声明相同类型的对象,因为这意味着您需要一个无限大小的对象,一个包含自身的对象。
似乎您想要一个根据需要增长/收缩的对象数组。在这种情况下,您可以使用Ball
指针的向量:
std::vector<Ball*> others;
创建新的Ball
实例并将其插入数组中的工作方式如下:
others.push_back(new Ball);
但是,与Java不同,C++没有垃圾回收器。因此,请确保再次删除元素。例如,在类的析构函数中:
for (size_t i = 0; i < others.size(); ++i) {
delete others[i];
}
或者,如果您使用的是 C++-11,则使用基于范围的 for 循环的较短版本:
for (auto ball : others) {
delete ball;
}
不可能声明一个对象,该对象是其自身类的字段。因为如果发生这种情况,当您声明该类的对象时,初始化过程就是递归调用。它类似于这样的Java代码
class Test {
Test t = new Test();
}
上面的代码会导致java.lang.StackOverflowError
相关文章:
- Arduino C++在构造函数中用参数声明对象数组
- 为什么我在声明对象数组时不能使用 -> 运算符?
- 如何在 if 语句中声明对象并在任何我想的地方使用它?
- 如何使用unique_ptr和make_unique正确声明对象数组
- 声明对象时,如何在C 中修复C2065错误
- 声明对象而不调用默认构造函数
- 一旦对象设置为 null,用于声明对象的堆大小的变量就设置为 null?
- 我可以使用名称而不是类型来声明对象文字吗?
- 在制作(Qt等)GUI时声明对象
- 在基本的GUI编程中,在哪里声明对象和方法
- 同时使用模板和参数声明对象
- "Undefined reference to"使用双模板类声明对象时出错
- 在头文件 C++ 中声明对象
- 在其类中声明对象
- C 可以通过使用要求其为某个类别的对象来声明对象
- 声明对象
- (C++)如何基于条件声明对象类成员
- 使用变量声明对象的名称
- C++ OOP 体系结构:决定是从基类声明对象还是继承基类
- 在声明对象之前在全局函数中使用类的成员函数