c++ - SFML c++ 创建乘法对象并调用构造函数?

标签 c++ sfml

大家好,当我试图从一个对象创建多个对象并想调用构造函数时,我遇到了一些奇怪的错误。

错误是: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/

相关文章:

c++ - 是否在 C++ 11 的编译时或运行时自动推断类型?

c++ - 从 C++ 函数返回对象的正确方法是什么?

c++ - 在 C++ 中,是否可以/如何在输入后、在同一行、在给出用户输入之前显示控制台输出?

c++ - 如何在 SFML 中找到矩形的坐标?

c++ - 仅接受来自特定 IP 的套接字

c++ - remapBilinear 中的断言失败 (!ssize.empty())

C++ asterisk 星号运算符

c++ - 没有 Visual Studio,其他人如何运行我的 SFML/C++ 项目?

c++ - "Stuttered"按键时移动

c++ - Opencv C++为每个imshow打开两个窗口