c++创建无参对象报错--warning empty parentheses were disambiguated as a function declaration[-Wvexing-parse]
其实报错信息已经告诉我们了,它认为创造无参对象的这种写法有歧义,有函数声明的歧义。并且还提供没我们消除歧义的建议,要么去掉圆括号"()“,要么使用大括号”{}"初始化对象来消除歧义。在没有第16行创建无参对象的时候,可以正常编译通过。虽然报warning但是可以正常生成可执行文件。那么为什么我们创建有参对象的时候,可以正常编译,无参的时候就报。创建无参对象,改写成第3、4行的形式,就不会报错了。了
·
c++创建无参对象报错–warning: empty parentheses were disambiguated as a function declaration [-Wvexing-parse]
有时候我们想创建一个有参或者无参对象,就像下面的写法:
class MyClass
{
public:
MyClass() { cout << "MyClass" << endl; } // 无参构造函数
MyClass(int a) : m_a{a} { cout << "MyClass(int a)" << endl; } // 有参构造函数
~MyClass() { cout << "~MyClass" << endl; } // 析构函数
private:
int m_a;
};
int main()
{
MyClass a(1); // 创建有参对象
MyClass b(); // 创建无参对象
return 0;
}
在没有第16行创建无参对象的时候,可以正常编译通过。但是写了第16行创建无参对象,就会报warning,报错如下:
6.cc: In function ‘int main()’:
6.cc:198:14: warning: empty parentheses were disambiguated as a function declaration [-Wvexing-parse]
198 | MyClass b(); // �������
| ^~
6.cc:198:14: note: remove parentheses to default-initialize a variable
198 | MyClass b(); // �������
| ^~
| --
6.cc:198:14: note: or replace parentheses with braces to value-initialize a variable
虽然报warning但是可以正常生成可执行文件。那么为什么我们创建有参对象的时候,可以正常编译,无参的时候就报WARNING FBI 了呢(开个玩笑是warning)?
其实报错信息已经告诉我们了,它认为创造无参对象的这种写法有歧义,有函数声明的歧义。并且还提供没我们消除歧义的建议,要么去掉圆括号"()“,要么使用大括号”{}"初始化对象来消除歧义。
MyClass a(1); // 创建有参对象
// MyClass b(); // 创建无参对象
MyClass c; // 创建无参对象
MyClass d{}; // 创建无参对象
创建无参对象,改写成第3、4行的形式,就不会报错了。
更多推荐
已为社区贡献7条内容
所有评论(0)