我有一对基础派生的类(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
是纯虚拟类。
答案 0 :(得分:1)
MA abc(f, 10);
像成员函数声明一样将其视为编译器,因此出现错误消息-它期望f
和10
是类型的名称。
对于内联成员变量初始化,必须使用花括号:
MA abc {f, 10};
但这对您没有多大用处,因为在您初始化它之前会使用f
。
(在线初始化是在任何构造函数初始化之前执行的;在类定义中编写它们的顺序是无关紧要的。)
将其初始化移至初始化列表:
ST1() : abc(f,10) {}
ST1(FD& a) : f(a), abc(f,10) {};
并将声明保留为
MA abc;