大家好,当我试图从一个对象创建多个对象并想调用构造函数时,我遇到了一些奇怪的错误。
错误是:const cha*r 类型的值不能用于初始化 Obstacle[3] 类型的实体 在这里创建对象指的是 Player 对象,因为它可以工作,即使我尝试使用 for-loop 来设置我的 ("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);
}
//菲利普
最佳答案
您使用了错误的数组声明方法。您创建一个包含三个对象的数组。您需要使用默认构造函数初始化每个对象。这是一种方法。 如果您以前没有见过结构,请不要担心。您只需要知道它就像小类一样。
#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;
如果您不习惯使用指针,这是一个相当复杂的解决方案。
关于c++ - SFML c++ 创建乘法对象并调用构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27558285/