我的源文件似乎给了我一个错误,我不太明白为什么我会收到这个错误,因为它似乎有些徒劳。我还想了解的是我可以为此做些什么来达到同样的效果。现在我将省略细节,但如图所示,我希望它是一个全局对象指针。
代码
#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::字符串
;在这种情况下,您需要的类型说明符是App::Game
。 - “错误:预计 X 在 Y 之前” 听起来 这意味着 Y 没问题,只要你在它前面插入一个X;但事实上,它实际上并没有说明任何有关 Y 的信息,除了它可能不是 X 之外。 “在 Y 之前”主要只是帮助您找到行中发生解析错误的位置。 (在许多情况下,确实是在 Y 之前需要一些东西——例如,如果 X 是一个分号,那么您很有可能在语句或声明 — 但在许多情况下,实际上需要的是某些东西而不是 Y。这里就是这种情况。)
int
被提及只是因为编译器争先恐后地想出一个类型说明符以希望继续解析,选择int
作为默认值。 (如果您编写了int *game = new;
,您就不会收到第二条错误消息。)
关于c++ - 为什么我不能将这个全局实例化为指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8720798/