类的奇怪问题

php*_*der 0 c++ oop class

我正在尝试制作一个简单的游戏引擎.我之前从未使用过OOP,所以这可能是一个简单的错误,但是在尝试创建类的实例时我遇到了这个错误.

invalid conversion from `World*' to `int'
initializing argument 1 of `World::World(int)'
Run Code Online (Sandbox Code Playgroud)

这是创建类的代码.

  World w = new World(100);
Run Code Online (Sandbox Code Playgroud)

而实际的班级:

class World {
    int maxParts;
    public:
        GameObject **parts;
        World(int maxParts);
        int addObject(int type);
    private:
        int firstFreeId();
};

World::World(int maxParts)
{
    parts = new GameObject *[maxParts];
}

...
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助.

CB *_*ley 13

new World(100)动态创建一个新World对象,将100传递给构造函数,但求值为指向创建对象的指针.

如果您只想构建一个World不需要new表达式的对象,可以直接构造它:

World w(100);
Run Code Online (Sandbox Code Playgroud)

您得到的错误是因为您正在尝试World根据表达式World返回的指针构造对象new.唯一的World构造函数需要一个int,你不能将指针类型转换为int没有显式转换的指针类型.

  • 您需要发布不起作用的完整代码以及它生成的完整错误消息,然后我们有机会说出它可能出错的地方. (2认同)

Gre*_*ill 7

new运营商返回一个指针:

World *w = new World(100);
Run Code Online (Sandbox Code Playgroud)

World以这种方式创建对象后,通常使用->运算符访问它:

w->addObject(5);
Run Code Online (Sandbox Code Playgroud)

当你完成它,不要忘记delete它或你将有内存泄漏:

delete w;
w = NULL;
Run Code Online (Sandbox Code Playgroud)

设置w = NULL并不是绝对必要的,但这是一种很好的做法,因为它可以防止您在删除对象后意外访问该对象.


Ric*_*dle 5

你在这里错过了一个星号:

World *w = new World(100);
Run Code Online (Sandbox Code Playgroud)

当你用new它创建一些东西时会给你一个指向新对象的指针,所以你把指针放入的变量必须用星号声明.