今日出会った間違い

nil
記事: 428
登録日時: 14年前

今日出会った間違い

投稿記事 by nil » 13年前

今日、というかついさっき出会った分かりづらい間違いを紹介しておきます。

CODE:

#include 
#include 

using namespace std;

class C{
	map table;

public:
	int get( const string key )const{
		return table.[ key ];
	}
};
すこぐ省略するとこんな感じのコードを書いていた時、エラーが出ました。

CODE:

error C2678: 二項演算子 '[' : 型 'const std::map' の左オペランドを扱う演算子が見つかりません
なんでじゃああああ! と半狂乱で原因を探ったところ、
map[]
というあまりありがたくない仕様を思い出しまして、
変数の中身が書き換えられるからconstメンバ関数内では[]演算子は使えないんだ……

と悟った時には真っ白に燃え尽きていました。
[]演算子をatに書き変えて何事もなかったように通るコンパイル。
この40分を返して欲しい。
…………40分で気付いてよかった。

アバター
h2so5
副管理人
記事: 2212
登録日時: 15年前

Re: 今日出会った間違い

投稿記事 by h2so5 » 13年前

こういう場合のVC++のエラーメッセージは分かりにくいですよね。
gccだとconstで引っかかってる場合は discards qualifiers と出るので分かりやすいんですが。

nil
記事: 428
登録日時: 14年前

Re: 今日出会った間違い

投稿記事 by nil » 13年前

本当にVSのtemplateのエラーは
► スポイラーを表示
こんなんばっかですからね~。
具体的に何がエラーになっているのかさっぱりわからないんですよね。

今のところはVS以外で開発することはないと思うんですが少しどうにかして欲しいのはどうにかして欲しいんですよね。