为啥编译器会抛出“预期类型说明符”?
Posted
技术标签:
【中文标题】为啥编译器会抛出“预期类型说明符”?【英文标题】:Why is compiler throwing "expected a type specifier"?为什么编译器会抛出“预期类型说明符”? 【发布时间】:2020-03-19 23:20:00 【问题描述】:class A
private:
int a;
public:
int get_a()
return a;
A(int mode)
a = 0;
A()
a = 5;
;
class B
public:
A b(0);
;
class C
int c;
public:
C(int mode)
c = 0;
C()
c = 1;
;
int main()
B bb;
C cc(0);
//cout << bb.b.get_a();
system("pause");
return 0;
如果我在 B 类的 b 上使用 () 括号,如果我切换到 一切都很好,则会出现错误。我的问题是不应该允许我这样做,因为在 main 中的 cc 上它不会给出任何错误。我允许在初始化对象时使用 () 括号。
【问题讨论】:
【参考方案1】:根据 C++ 20 标准(11.4 类成员),您可以使用大括号或等号初始化器来初始化类的数据成员
member-declarator:
...
declarator brace-or-equal-initializeropt
所以你可以使用任何一个
class B
public:
A b = 0;
;
或
class B
public:
A b 0 ;
;
这可以避免函数声明的歧义。
【讨论】:
以上是关于为啥编译器会抛出“预期类型说明符”?的主要内容,如果未能解决你的问题,请参考以下文章
为啥我的 Tomcat 服务器在编译 JSP 时会抛出间歇性 404?
glCreateShader 在 OSX 上抛出异常,为啥?