C++ 在c+;中获取预期的类型说明符错误+;
我有一对基类(C++ 在c+;中获取预期的类型说明符错误+;,c++,C++,我有一对基类(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
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);
在编译器看来,它就像一个成员函数声明,因此会显示错误消息—它希望f
和10
是类型名称
对于内嵌成员变量初始化,必须使用大括号:
MA abc {f, 10};
但这对您没有多大用处,因为在初始化它之前,它会使用f
。
(行内初始化在任何构造函数初始化之前执行;在类定义中写入它们的顺序无关。)
将其初始化移到初始化器列表:
ST1() : abc(f,10) {}
ST1(FD& a) : f(a), abc(f,10) {};
并将声明保留为
MA abc;
MA-abc(f,10)
看起来像一个函数声明,您应该声明它的签名。类似于maabc(fdf,inti)
abc
应该是成员函数还是变量?@Someprogrammerdude它应该是成员对象。我尝试过初始化列表方法,但正如我所说,MA没有默认构造函数。“我得到MA的默认构造函数已删除”错误。@hmmmmmm如果您正在执行构造函数初始值设定项列表,则不应该得到它。@我重试过的某个程序员,仍然得到无法引用“MA”的默认构造函数--它是一个已删除的函数
error@hmmmmmm然后你尝试的时候做错了什么。如果您在初始化器列表中初始化abcabc
,它不需要默认构造函数。@hmmmmm您的意思是,像上面的答案一样?