TopCoderのプラグインGreedで自動生成したコードで「あいまいなシンボルです」エラーを回避


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

TopCoderプラグインGreed(詳細はTopCoder の強欲プラグイン、Greed を使う!)で自動生成したコードをVisual Studioでビルドすると以下のようなエラーが出ます。

error C2872: 'data': あいまいなシンボルです。
note: 'std::ifstream data' である可能性があります。
note: または 'data'

これが指すコードは以下です。

using namespace std;

ifstream data("MajoritySubarray.sample");

string next_line() {
    string s;
    getline(data, s);
    return s;
}

エラーの原因は、<string>ヘッダで提供されるstd::dataという関数と名前がバッティングしていることでした。コード中のdatadata2と変えるとビルドが通りました。

当たり前ですが、ちゃんとしたコードではそもそもusing namespace std;しないようにしましょう。