获得预期 C++ 中的类型说明符错误

Getting Expected a type specifier error in c++

本文关键字:类型 说明符 错误 C++      更新时间:2023-10-16

我有一对碱基派生类(IND=MA的基数,MA= 派生自IND;ST=ST1的基数,ST1= 派生自ST) 和另一个类 (FD)。我正在尝试像这样使用它们:

class ST1: public ST{

public:
FD f;
ST1(){};
ST1(FD& a) : f(a) {};
MA abc(f, 10);
};

我得到的错误:

E0757   member "ST1::f" is not a type name
E0079   expected a type specifier
C2061   identifier 'f'  

所有错误都在MA abc(f, 10);行上。

请注意,MA没有默认构造函数,接受FD&, int参数,IND是一个纯虚拟类。

MA abc(f, 10);

编译器看起来像一个成员函数声明,因此出现错误消息 - 它期望f10是类型的名称。

对于内联成员变量初始化,必须使用大括号:

MA abc {f, 10};

但这对您没有多大用处,因为这会在您初始化它之前使用f
(内联初始化在任何构造函数初始化之前执行;在类定义中编写它们的顺序无关紧要。

将其初始化移动到初始化器列表:

ST1() : abc(f,10) {}
ST1(FD& a) : f(a), abc(f,10) {};

并将声明保留为

MA abc;