为啥编译器会抛出“预期类型说明符”?

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?

这个 if 语句会抛出异常还是忽略它? [复制]

glCreateShader 在 OSX 上抛出异常,为啥?

为啥有时会抛出 FileNotFoundException

为啥 FileOutputStream 会抛出 FileNotFoundException?

为啥“prepareCall”会抛出 NumberFormatException?