为什么我不能将此全局实例化为指针



我的源文件似乎给了我一个错误,我不太明白为什么会出现这个错误,因为它似乎有些徒劳。我还想了解的是,我能做些什么来达到同样的效果。我现在将省略细节,但如图所示,我希望它是一个全局对象指针。

代码

#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)。


编辑后添加:哦,我可能应该解释错误消息,因为其他人会因为不同的原因收到类似的消息。一旦你有了以下事实,它们大多是不言自明的:

  • "类型说明符"是表示类型的东西,例如intchar*stringstd::string;在这种情况下,您需要的类型说明符是App::Game
  • "错误:在Y之前应为X"听起来就像意味着Y很好,只要你在它之前插入一个X;但事实上,它实际上并没有说Y,只是可能它不是X。"BeforeY"主要帮助您查找行中发生解析错误的位置。(在许多情况下,实际上是在Y之前需要一些东西,例如,如果X是分号,那么很有可能在语句或声明之后删除了分号,但在许多情况中,实际上是需要一些东西而不是Y/em>。这里就是这样。)
  • 之所以提到int,只是因为编译器为了继续解析而匆忙想出一个类型说明符,并选择int作为默认值。(如果您编写了int *game = new;,就不会收到第二条错误消息。)

相关内容

  • 没有找到相关文章