コンパイル時のエラー コンストラクタ宣言に問題ありますか?

解決


エル  2004-09-17 00:28:57  No: 54515

今、VisualC++.NET2003でプログラムを作成しているのですが、
次のようなエラーが出ていて困っています。
原因なども不明なのでご教授していただければ助かります。

error C2533: 'Table::__ctor' : コンストラクタの宣言に戻り値の型が含まれています。
fatal error C1903: 直前のエラーを修復できません。コンパイルを中止します。

上記がコンパイル時に表示されるエラーです
実際のソースは次の通りです。

//コンストラクタ
Table::Table(double up,double down,double right,double left,double narrow,double deep,double nomove){
  this.up=up;
  this.down=down;
  this.right=right;
  this.left=left;
  this.narrow=narrow;
  this.deep=deep;
  this.nomove=nomove;
}

Tableクラスを全部乗っけると長くなるのでコンストラクタだけ掲載します。
Tableというクラス名が作れないことも考えて、違うクラス名も試しましたが
エラー内容に変わりはありませんでした。

これ以外にも必要なソース等ありましたら書き込んでいただければ
貼らせていただきます。


tetrapod  2004-09-17 01:13:25  No: 54516

C/C++ のコンパイル時エラーは、当該行 *ではなく* そのさらに前の行に原因があることが多いです。
エラーが指摘された行より数行前から見る癖をつけてください。

class Table { ...
} // ココにセミコロンが抜けている!
Table::Table(...) {
}
となっていませんか?


エル  2004-09-17 05:34:27  No: 54517

クラスの宣言をする時にセミコロンをつけなければならなかったんですね。
確かにセミコロンが抜けていて、入れると
コンパイルできるようになりました。
どうも、ありがとうございました。


RAPT  2004-09-23 08:02:58  No: 54518

# .NET環境は無知で申し訳ありませんが。
本題とは関係ありませんが、VC++.NET2003では、thisはポインタじゃないんですか?

少なくとも、VC++6では、thisはポインタなので、
    this->up = up;  とか
    (*this).up = up;  とか
しないといけなかったかと思うのですが。


tetrapod  2004-09-24 17:46:01  No: 54519

# 私も .NET 2003 は使っていませんが
まあ少なくとも現代 C++ を名乗る以上は this は T* const です。
それ以外にはありえません。

提示のコードは短い割にツッコミどころ満載なのですが、
議題の本質には関係なさそうだったのであえて放置プレイしていたのですけど...

・コンストラクタでは「メンバ代入」でなく「メンバ初期化」をすべし
・いちいち毎回 this-> って書くのめんどくさくないですか?
・コンストラクタの引数多すぎ、設計見直したほうが良くないかい?
・なんか名前的には double である必然の無いメンバがいるような気がするけど...
などなど。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加