• 締切済み

警告「代入される前に使われている」を出す方法

bccで以下のコードをコンパイルすると。 「'i' は、おそらく値が代入される前に使われている」 と警告が出ますが、 「'h' は、おそらく値が代入される前に使われている」 とは警告を出してくれません。 警告を出す方法ってないでしょうか? Hogeメンバに bool 型の初期化フラグでも実装しようかな・・・。 #include <iostream> class Hoge { public: Hoge(){ } Hoge( int i ){ t = i; } operator int(){ return t; } int t; }; int main() { int i; Hoge h; std::cout << i << std::endl; std::cout << h << std::endl; return 0; }

みんなの回答

回答No.2

 こんにちは。  警告を出すのは無理そうですが、 class Hoge { public: Hoge(int i) : t(i) { } operator int() const { return t; } private: int t; };  の様にして様にして、デフォルトコンストラクタを無くせば、  Hoge h = 0;  又は  Hoge h(0);  と書かない限り、コンパイルエラーに出来ると思います。

ICE_FALCON
質問者

お礼

回答ありがとうございます。 警告を出すのは無理なのですか・・。 デフォルトコンストラクタを無くす・・・。 面白いですね。 でも必ず宣言と同時に代入しなければいけなくなりますね・・・。

回答No.1

C++は昔かじった程度なんですが、hは宣言した際 インストラクタ(定義されていないみたいですが)によって 初期化されている扱いになっているからじゃないですか? iはintで宣言されているので クラスのようなインストラクタは ないため初期化に関する警告が出力されていることになるかと思います。

ICE_FALCON
質問者

お礼

回答ありがとうございます。 宣言した際にコンストラクタで初期化されている扱い・・・ なるほど。 組込み型とユーザ定義型で区別しているんでしょうか?