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

时间:2019-05-08 08:36:01

标签: c++

我有一对基础派生的类(IND = MA的基础,MA =源自IND的基础; ST = { {1}},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是纯虚拟类。

1 个答案:

答案 0 :(得分:1)

MA abc(f, 10);

像成员函数声明一样将其视为编译器,因此出现错误消息-它期望f10是类型的名称。

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

MA abc {f, 10};

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

将其初始化移至初始化列表:

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

并将声明保留为

MA abc;