1

私のヘッダーファイル:

Esame();
Esame(string);
Esame(string, Voto);

これはc++テスタークラスです:

//OK
Esame esame("Algoritmi e strutture dati", 30);
esame.stampaEsame();

//OK
Esame esame2("Metodi Avanzati di Programmazione");
esame2.setVoto(26);
esame2.stampaEsame();

//ERROR 
Esame esame3();
esame3.setVoto(26); //Method could not be resolved
esame3.stampaEsame(); //Method could not be resolved

コードはまったくコンパイルされません。上記のコードでオブジェクトが同じクラスで作成されている場合、なぜメソッドが見つからないのですか?

4

2 に答える 2

3

esame3()デフォルトのコンストラクターを呼び出しません。あなたの場合、コンパイラはあなたがメソッドを宣言したと考えています

そのはず

Esame esame3;

また

Esame esame3=Esame();

を使用newしてオブジェクトを作成すると、動的に割り当てられるオブジェクトが作成されます。

pointerその場合、あなたのクラスはこのようなものでなければなりません

Esame *esame3=new Esame;

メンバーメソッドまたは変数にアクセスする->代わりにを使用する必要があります。.

esame3->method1();
esame3->varable1;
于 2012-10-21T17:21:38.833 に答える
1

Esame esame3();関数宣言です。esame3この場合、オブジェクトに名前を付けません。esame3これは、パラメーターを受け取らず、型のオブジェクトを返すという関数を宣言しますEsame

これは、最も厄介な解析と呼ばれます。

デフォルトのコンストラクターを使用してオブジェクトを作成するには、Esame esame3;(括弧なし)を使用します。

Esame esame3;
esame3.setVoto(26); 
esame3.stampaEsame();
于 2012-10-21T17:18:52.440 に答える