なぞのコンパイルエラー

C++Builderで再び怪現象に遭遇。
XMLデータバインドウィザードで3つほどXMLのデータバインドを作ったときの話。


メインフォーム以外のユニットでXMLデータバインドクラスを使おうとしてこんなコードを書いてみた。

	_di_IXMLHogeType		hoge_file;

	hoge_file = LoadHoge(filename);

これをコンパイルすると

[C++ エラー] FooUnit.cpp(xx): E2285 '_di_IXMLHogeType::operator = (void)' に一致するものが見つからない

とおっしゃる。


問題のtemplate DelphiInterface::operator=はborland\bds\4.0\include\vcl\systobj.hに定義されているようなので、コードに問題はなさそうな気がする。
メインフォームに同じコードを書いたときはコンパイルエラーにならないし。


systobj.hをここに引用してよいものかわからないので今回は引用しないけど、おかしなソースコードじゃないと思う。operator=の引数がDelphiInterface &型になっててDelphiInterfaceとは別の型を受け取るように定義されてるっぽい。
でも、今回の件で言えばLoadHogeの戻り値も_di_IXMLHogeTypeでT==ANOTHERINTFなので何も問題なさそうなんだけどなぁ。


なんか、この間もテンプレート関係でコンパイルエラーがあったし、bcc32はやっぱりテンプレート苦手なのかな。
とりあえずググってみたけど、海外の掲示板で同じっぽい現象で困っている人がいたっぽいけどお約束のごとく解決したんだかしてないんだかよくわからず。(単に英語を読み取る能力が欠如しているだけかも)


仕方ないので手っ取り早くやった解決策は。
LoadHoge呼び出しの代わりにLoadHogeの中身をそのまま展開してみました。

	// XMLデータバインドクラスのLoadHogeから引用(^^;
	hoge_file = (_di_IXMLHogeType)LoadXMLDocument(filename)->GetDocBinding("Hoge", __classid(TXMLHogeType), "");

これでコンパイルエラーは解消したけど、原因はなぞのまま…