我正在尝试制作一个简单的游戏引擎.我之前从未使用过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没有显式转换的指针类型.
该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并不是绝对必要的,但这是一种很好的做法,因为它可以防止您在删除对象后意外访问该对象.
你在这里错过了一个星号:
World *w = new World(100);
Run Code Online (Sandbox Code Playgroud)
当你用new它创建一些东西时会给你一个指向新对象的指针,所以你把指针放入的变量必须用星号声明.