2017-10-24 12 views
0

名前はMatrixという名前のクラスを作成しました。このクラスには、2つのコンストラクタ、1つのデフォルトコンストラクタ、および1つのコピーコンストラクタがあります。さらに、そこに私が書いた行列式.INのメインと呼ばれるパブリックメソッドです:括弧で初期化されたオブジェクトのC++タイプ

Matrix a(); 
a.Determinant() 

または

Matrix a(); 
a->Determinant() 

は、しかし、それらのどれも有効ではありません。 aのタイプを印刷しますが、これはどのタイプであるのか理解できません。

+1

[既定のコンストラクタと空の括弧の組み合わせ](https://stackoverflow.com)/questions/180172/default-constructor-with-blank-bracket) –

答えて

0

これはC++の最も厄介な解析です。ライン:

Matrix a(); 

は引数を受け入れないとMatrixを返す関数の宣言と解釈されます。

Matrix a(); 

が行列、デフォルトの構成ではないオブジェクトを返す関数を宣言します。デフォルト構築されたオブジェクトを作成するための適切な方法は、

Matrix a; 
+0

2つの例のエラーは1行目ではなく2行目のエラーです。 –

+1

@chaviarasmichalisはい、これは予想される動作です。 1行目は 'a'関数を正しく宣言していますが、' a.Determinant() 'メソッドを呼び出そうとしています。 C++の関数にはメソッドがありません。答えに修正を実装すると、2行目のエラーが消えてしまいます。 –

+0

ありがとうございます。 –

0

ラインだけです。かっこは省略してください。

参照:より困難なケースの説明については、https://en.wikipedia.org/wiki/Most_vexing_parseを参照してください。 (これは重複している必要がありますが、クイック検索では1分になっていません)。

+0

私は同じ質問の簡潔な議論を見つけたように、重複して旗を立てました。 –

関連する問題