我使用类和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
我完全不知道这意味着什么,并且找不到任何使用搜索谷歌的错误代码,所以任何帮助将不胜感激。
答案 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");