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;
游戏所需的生存期
,也可以使用游戏代码>(在堆栈上),但随后的game->xxx
调用需要更改为game.xxx
+1。根据游戏所需的生存期
,也可以使用游戏代码>(在堆栈上),但是以后的game->xxx
调用需要更改为game.xxx
。