用括号

时间:2017-10-24 16:06:48

标签: types initialization

我做了一个名为Matrix的班级。该类有两个构造函数,一个默认构造函数和一个复制构造函数。另外还有一个名为Determinant的公共方法。主要是我写道:

Matrix a(); 
a.Determinant()

Matrix a(); 
a->Determinant()

但它们都不是有效的。 我打印了a的类型,但我不明白这是什么类型的?

2 个答案:

答案 0 :(得分:0)

这是C ++最令人烦恼的解析。这一行:

Matrix a(); 

被解释为函数的声明,它不接受任何参数并返回Matrix。创建默认构造对象的正确方法是

Matrix a;

答案 1 :(得分:0)

该行:

Matrix a();

声明一个返回Matrix的函数,而不是一个默认构造的对象。省略括号。

请参阅:https://en.wikipedia.org/wiki/Most_vexing_parse以了解更棘手的案例。 (这必须是重复的,但快速搜索并没有改变。我会在一分钟内看起来更难。)