我的源文件似乎给了我一个错误,我不太明白为什么会出现这个错误,因为它似乎有些徒劳。我还想了解的是,我能做些什么来达到同样的效果。我现在将省略细节,但如图所示,我希望它是一个全局对象指针。
代码
#include "functions.h"
App::Game* game = new Game;
void display_func() {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
game->render_objects();
glFlush();
}
void init(int argc, char** argv) {
glutInit(&argc, argv);
game->init_window();
glutDisplayFunc(display_func);
game->init();
glutMainLoop();
}
编译器错误
functions.cpp:3:23: error: expected type-specifier before ‘Game’
functions.cpp:3:23: error: cannot convert ‘int*’ to ‘App::Game*’ in initialization
我知道我无法在头文件中初始化它,那么我有什么选项?
您需要编写
App::Game* game = new App::Game;
(用App::Game
代替Game
)。
编辑后添加:哦,我可能应该解释错误消息,因为其他人会因为不同的原因收到类似的消息。一旦你有了以下事实,它们大多是不言自明的:
- "类型说明符"是表示类型的东西,例如
int
或char*
、string
或std::string
;在这种情况下,您需要的类型说明符是App::Game
- "错误:在Y之前应为X"听起来就像意味着Y很好,只要你在它之前插入一个X;但事实上,它实际上并没有说Y,只是可能它不是X。"BeforeY"主要帮助您查找行中发生解析错误的位置。(在许多情况下,实际上是在Y之前需要一些东西,例如,如果X是分号,那么很有可能在语句或声明之后删除了分号,但在许多情况中,实际上是需要一些东西而不是Y/em>。这里就是这样。)
- 之所以提到
int
,只是因为编译器为了继续解析而匆忙想出一个类型说明符,并选择int
作为默认值。(如果您编写了int *game = new;
,就不会收到第二条错误消息。)