error C2872: あいまいなシンボル

古いプロジェクトにコードを追加中に以下のようなあいまいなシンボルエラーが発生。
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 フォルダ無いにまとめてあったけど、古いバージョンのライブラリのヘッダファイルが、プロジェクトフォルダ内になぜか混入(消し忘れ?)していた。。。(;_;)
優先順位の関係で、その古いヘッダファイル(プロジェクトに追加されてない)が参照されてしまっていたのでした。(^^;)

どこに落とし穴があるかわかりません。。。

そのファイルを削除したら、正常ビルド完了!
なぜにこんなものが残っていたのか。。。
[PR]
by isoq | 2005-10-12 20:00 | C/C++/Win32
e87.com(千趣会イイハナ) 花を贈るなら日比谷花壇
<< VCでビルド中にコンパイラ(C... ASP.NETで特定ページにだ... >>