错误:C ++需要所有声明OOP的类型说明符

时间:2014-05-12 14:01:48

标签: c++ oop

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

2 个答案:

答案 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};

或在运行时调用专用函数来分配元素。