古いプロジェクトにコードを追加中に以下のようなあいまいなシンボルエラーが発生。
error C2872: 'ostream' : あいまいなシンボルです
これは、プロジェクト中で、2つの形式の同名のタイプが宣言されている時に発生する。
たとえば、こんな感じ。
#include <ofstream.h>
#include <ofstream>
using namespace std;
ofstream& func1(ofstream&); // あいまい
std::ofstream& func1(std::ofstream&); // OK
::ofstream& func1(::ofstream&); // OK
この場合、ofstream で参照できる名前が2つあり、コンパイラはどちらが良いか判断できない。
こっちとしてはどちらでも良いのだけれども、そういうわけにもいかないらしい。
これにはまってしまった。
何でこんなのにはまったかというと、参照しているヘッダファイルが問題だった。
ライブラリ中で、<ofstream.h> と <ofstream> が混在していました。
そこで、ヘッダファイル中で、すべての #include を #include<ofstream> に変えたけど、問題が解消されない。。。
なぜか!?
実は、某ライブラリのヘッダファイルは、ライブラリ名\include フォルダ無いにまとめてあったけど、古いバージョンのライブラリのヘッダファイルが、プロジェクトフォルダ内になぜか混入(消し忘れ?)していた。。。(;_;)
優先順位の関係で、その古いヘッダファイル(プロジェクトに追加されてない)が参照されてしまっていたのでした。(^^;)
どこに落とし穴があるかわかりません。。。
そのファイルを削除したら、正常ビルド完了!
なぜにこんなものが残っていたのか。。。