Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.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++;所有OOP声明都需要类型说明符_C++_Oop - Fatal编程技术网

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

C++ 错误:C++;所有OOP声明都需要类型说明符,c++,oop,C++,Oop,我全局声明基类的指针,同时用派生类初始化指针,但是如果全局声明,则会出现错误,但在Display()函数中声明指针时不会出现错误 Diagram *p[3]; p[0] = new Diagram; p[1] = new Board; p[2] = new Pacman; 您不能在全局范围内进行赋值-您只能在全局范围内进行声明和定义。 这就是为什么编译器说“C++要求所有声明都有一个类型说明符”。 (对于编译器,p[0]=newdiagram;必须是声明,因为它位于全局范围。) 正如您所注意到

我全局声明基类的指针,同时用派生类初始化指针,但是如果全局声明,则会出现错误,但在Display()函数中声明指针时不会出现错误

Diagram *p[3];
p[0] = new Diagram;
p[1] = new Board;
p[2] = new Pacman;

您不能在全局范围内进行赋值-您只能在全局范围内进行声明和定义。
这就是为什么编译器说“C++要求所有声明都有一个类型说明符”。
(对于编译器,
p[0]=newdiagram;
必须是声明,因为它位于全局范围。)

正如您所注意到的,作业必须以函数形式进行

您可以在声明中初始化inline,如下所示:

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

虽然可以在全局范围内声明和初始化变量,但不能为这些变量赋值。当您提醒自己全局范围只能包含声明时,这一点可能会更清楚。您需要一次性声明和初始化

Diagram *p[3] = { new Diagram, new Board, new Pacman };

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

哪个
Display()
函数?你能再给我一些背景吗?此外,您可能需要添加编译器错误消息。@ Envu CLAN++-C-O游戏发布。o GAME-Relase.CPP游戏发布。CPP:42:1:错误:C++需要一个类型声明器用于所有声明P(0)=新图表;^游戏发布:CPP:43:1:错误:C++需要一个类型声明器用于所有声明P(1)=新的板;^游戏发布:CPP:44∶1:错误:C++需要一个类型声明器用于所有声明P(2)=新PACMAN;^产生了3个错误。make:**[game release.o]错误1请编辑您的问题并在那里添加输出。它提高了可读性。@envu先生,这是。我将非常感谢你的建议。此外,如果我们单独声明指针,它可以工作,但为什么不使用基类指针呢?我只能提示问题可能是什么,因为您的代码不完整。从错误消息判断,编译器似乎认为您试图在第42、43和44行声明
p
。因此,之前没有看到
p
的声明。你能提供额外的上下文吗?虽然这种声明全局指针的方法是正确的,为什么p[3],即Pacman类(派生的)不提供Pacman类中定义的函数?我是这样写的p[2]>,但它不允许派生类的函数Pacman@Shaan因为当您有一个指向
图表的指针时,编译器无法知道它指向
Pacman
。阅读你书中关于多态性的章节。
Diagram *p[3] = {new Diagram, new Board, new Pacman};