SFML c ++创建多个对象并在构造函数中调用?

时间:2014-12-19 00:54:55

标签: c++ sfml

当我试图从一个对象创建多个对象并想要调用构造函数时,我发现了我的错误。

错误是: 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);
 }

//菲利普

1 个答案:

答案 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;

如果您不习惯使用指针,这是相当复杂的解决方案。