当我试图从一个对象创建多个对象并想要调用构造函数时,我发现了我的错误。
错误是: const cha * r类型的值不能用于初始化Obstacle类型的实体[3] 在这里创建对象引用了Player对象因为它有效,即使我尝试for循环来设置我的(" img ....")我得到了同样的错误
static const int CAP = 3;
//Works! Player player = ("img/playerSheet.png");
Obstacle obstacles[CAP] =("img/obstacle.png");
Obstacle构造函数看起来像这样
Obstacle::Obstacle(string spriteSearch) : Object(spriteSearch)
{
setPosition(750, 500);
}
//菲利普
答案 0 :(得分:1)
您正在使用声明数组的错误方法。您创建一个包含三个对象的数组。您需要使用默认构造函数初始化每个对象。这是一种方法。 如果您之前没有看过结构,请不要担心。所有你需要知道它就像一个小班级。
#include <iostream>
#include <string>
using namespace std;
struct Object
{
string name;
Object(string _name)
{
name = _name;
}
};
int main()
{
Object obs[3] = {"one", "two", "three"};
cout<<obs[0].name<<obs[1].name<<obs[2].name<<endl;
system("pause");
return 0;
}
编辑;如果你有一个大容量,比如1000.我建议添加一个单独的功能。你没有在默认构造函数中初始化,但实际上创建了一个Initialize函数。那你打电话。举个例子;
Obstacle obstacles[CAP];
for(int i=0; i<CAP; i++)
{
obstacles[i].Initialize("img/playerSheet.png");
}
评论:“好吧,我刚刚编辑了上面的构造函数,我之前写错了...所以你的意思是forloop以及我如何调用构造函数,如obstaclei;?:O”
我可能在这里错了。但我认为为了调用实际的构造函数,唯一的方法是这样做:
变化:
Obstacle obstacles[CAP] =("img/obstacle.png");
等等;
const int CAP = 5;
Object** obstacles = new Object*[CAP];
for(int i = 0; i<CAP; i++)
{
obstacles[i] = new Object(filename);
}
//Do other stuff. And when done, release memory.
for(int i=0; i<CAP; i++)
{
delete obstacles[i];
}
delete []obstacles;
如果您不习惯使用指针,这是相当复杂的解决方案。