Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/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+;中获取预期的类型说明符错误+;_C++ - Fatal编程技术网

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然后你尝试的时候做错了什么。如果您在初始化器列表中初始化abc
abc
,它不需要默认构造函数。@hmmmmm您的意思是,像上面的答案一样?