Diagram *p[3];
p[0] = new Diagram;
p[1] = new Board;
p[2] = new Pacman;
我在全局声明基类的指针,同时我用派生类初始化指针,但是如果我全局地执行它会产生错误,但是当我在Display()函数中声明指针时则不会。
clang++ -c -o game-release.o game-release.cpp
game-release.cpp:42:1: error: C++ requires a type specifier for all declarations
p[0] = new Diagram;
^
game-release.cpp:43:1: error: C++ requires a type specifier for all declarations
p[1] = new Board;
^
game-release.cpp:44:1: error: C++ requires a type specifier for all declarations
p[2] = new Pacman;
^
3 errors generated.
make: *** [game-release.o] Error 1
答案 0 :(得分:1)
您无法在全球范围内执行作业 - 您只能在那里进行声明和定义
这就是编译器说" C ++需要所有声明的类型说明符"。
的原因
(对于编译器,p[0] = new Diagram;
必须是声明,因为它在全局范围内。)
当你注意到时,作业必须进入一个功能。
你可以在声明中内联初始化,如下所示:
Diagram *p[3] = { new Diagram, new Board, new Pacman };
答案 1 :(得分:1)
虽然可以在全局范围内声明和初始化变量,但不能分配给这些变量。当您提醒自己全局范围只能包含声明时,这可能会变得更加清晰。您需要一次性声明和初始化
Diagram *p[3] = {new Diagram, new Board, new Pacman};
或在运行时调用专用函数来分配元素。