Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么我不能将这个全局对象实例化为指针?_C++_Pointers_Compiler Errors_Global Variables - Fatal编程技术网

C++ 为什么我不能将这个全局对象实例化为指针?

C++ 为什么我不能将这个全局对象实例化为指针?,c++,pointers,compiler-errors,global-variables,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_o

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

代码

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

       App::Game* game = new App::Game;
      
      (使用
      App::Game
      而不是
      Game


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

      • “类型说明符”是表示类型的东西,例如
        int
        char*
        string
        std::string
        ;在本例中,您需要的类型说明符是
        App::Game
      • “错误:在Y之前预期X”听起来好像意味着Y是好的,只要在Y之前插入一个X;但事实上,它实际上并没有说任何关于Y的事情,除了它可能不是一个X。“在Y之前”主要是帮助您找到解析错误发生的位置。(在许多情况下,确实需要在Y之前做一些事情——例如,如果X是分号,那么很有可能在语句或声明之后删除分号——但在许多情况下,实际上需要做一些事情,而不是Y。这里就是这种情况。)
      • int
        之所以被提及,是因为编译器为了继续解析而争先恐后地想出一个类型说明符,选择了
        int
        作为默认值。(如果您编写了
        int*game=new;
        ,您就不会收到第二条错误消息。)

      制造一个单一国家,是吗?你确定引擎从标题中知道什么是App:Game吗?什么是App?它是否有嵌套类型的“Game”?生成一个单状态?你确定引擎从标题中知道什么是App:Game?什么是App?它是否有嵌套类型的“Game”?+1。根据
      游戏所需的生存期
      ,也可以使用
      游戏(在堆栈上),但随后的
      game->xxx
      调用需要更改为
      game.xxx
      +1。根据
      游戏所需的生存期
      ,也可以使用
      游戏(在堆栈上),但是以后的
      game->xxx
      调用需要更改为
      game.xxx