错误:'。'之前的预期初始值设定项代币

时间:2011-04-29 16:21:37

标签: c++ class sdl

我使用类和C ++的面向对象方面相当新,并在标题中得到错误。

我正在使用SDL编写俄罗斯方块游戏。

我在shapes.h

中有一个类定义
class shape
{
public:
    SDL_Surface *colour;
    int rotation1[4][4];
    int rotation2[4][4];
    int rotation3[4][4];
    int rotation4[4][4];

    bool load();
    void move();

    shape();
};

在main.h中我已经包含了shapes.h,并使用

定义了类的实例
//Create shapes
shape O, T, S, L, R, Z, I;

我也有每个形状的单独文件,例如I.cpp,因为每个形状都有不同的代码,用于将图像的块颜色加载到SDL_Surface颜色以及块的不同旋转的各种数组,所以我将其分成每个块的一个文件。

在I.cpp中我已经包含了main.h并尝试为I设置加载函数,如下所示:

bool I.load()
{
    //if loading the cyan square texture fails
    if ((I.colour = surface::onLoad("../Textures/cyanSquare.png")) == NULL)
    {
        //print error
        cout << "Unable to load cyanSquare.png";
        //return fail
        return false;
    }

    I.rotation1 = {{7,7,7,7},
                   {0,0,0,0},
                   {0,0,0,0},
                   {0,0,0,0}};
    I.rotation2 = {{0,0,7,0},
                   {0,0,7,0},
                   {0,0,7,0},
                   {0,0,7,0}};
    I.rotation3 = {{7,7,7,7},
                   {0,0,0,0},
                   {0,0,0,0},
                   {0,0,0,0}};
    I.rotation4 = {{0,0,7,0},
                   {0,0,7,0},
                   {0,0,7,0},
                   {0,0,7,0}};

    return true;
}

当我尝试编译它(使用GCC)时,它在I.cpp的第3行报告错误:

error: expected initializer before '.' token

我完全不知道这意味着什么,并且找不到任何使用搜索谷歌的错误代码,所以任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:4)

这不是有效的C ++。 I是一个变量;您无法为特定变量(bool I.load())定义成员函数。也许你的意思是bool shape::load()

答案 1 :(得分:2)

bool I.load()

不应该 bool shape::load()

我只是'shape'类型的实例。如何在函数实现中使用'I',因为它对'I'实例一无所知!

你可能想这样做: 1.添加带参数的构造以指定实例的图片:

class shape
{
public:
//....

    shape(const char* pImagePath);
private:
    const char* m_pImagePath;
};

并将构造函数实现为:

shape::shape(const char* image_path) : m_pImagePath(pImagePath) {}

您的load()可以实现为:

bool shape::load()
{
    //if loading the cyan square texture fails
    if ((colour = surface::onLoad(m_pImagePath)) == NULL)
    {
        cout << "Unable to load cyanSquare.png";
        return false;
    }

    rotation1 = {{7,7,7,7},
                 {0,0,0,0},
                 {0,0,0,0},
                 {0,0,0,0}};
    rotation2 = {{0,0,7,0},
                 {0,0,7,0},
                 {0,0,7,0},
                 {0,0,7,0}};
    rotation3 = {{7,7,7,7},
                 {0,0,0,0},
                 {0,0,0,0},
                 {0,0,0,0}};
    rotation4 = {{0,0,7,0},
                 {0,0,7,0},
                 {0,0,7,0},
                 {0,0,7,0}};

    return true;
}

创建实例'I'如下:

shape I("../Textures/cyanSquare.png");