c++ - 为什么我不能将这个全局实例化为指针?

标签 c++ pointers compiler-errors global-variables

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

代码

#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::字符串;在这种情况下,您需要的类型说明符是 App::Game
  • “错误:预计 XY 之前” 听起来 这意味着 Y 没问题,只要你在它前面插入一个X;但事实上,它实际上并没有说明任何有关 Y 的信息,除了它可能不是 X 之外。 “在 Y 之前”主要只是帮助您找到行中发生解析错误的位置。 (在许多情况下,确实是在 Y 之前需要一些东西——例如,如果 X 是一个分号,那么您很有可能在语句或声明 — 但在许多情况下,实际上需要的是某些东西而不是 Y。这里就是这种情况。)
  • int 被提及只是因为编译器争先恐后地想出一个类型说明符以希望继续解析,选择 int 作为默认值。 (如果您编写了 int *game = new;,您就不会收到第二条错误消息。)

关于c++ - 为什么我不能将这个全局实例化为指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8720798/

相关文章:

python - Django 与 C++ 通信

c++ - C/C++ 预处理错误

c - 取消引用 ‘void *’ 指针和转换不起作用

c - 何时释放指针

windows - Dev-C++为错误版本的Windows创建EXE?

java - 一个关于程序编译的问题

c++ - 代码对齐会显着影响性能

c++ - 动态分配数组的有趣行为

c - 如何为字符指针赋予字符串值?

ios - ios-simulator在ios 7下不起作用