2

現在、コンパイル時間を短縮するためにリファクタリングインクルードのプロセスを実行していますが、次のコンパイルエラーが発生しました。

[C++ Error] some_class.cpp(53): E2015 Ambiguity between 'IID_IDropTarget' and 'Virtualtrees::IID_IDropTarget'

それが指すコード行は次のとおりです。

 if (iid == IID_IUnknown || iid == IID_IDropTarget)

使用すると正常にVirtualtrees::IID_IDropTargetコンパイルされますが、実装したCOMIDropTargetインターフェイスを使用する必要があります。問題は、VirtualtreesコンポーネントにIDropTargetインターフェイスの別の実装があり、それらが競合していることである可能性があると思います。

私が望まないことをどのように指定できるかについてのアイデアはありますVirtualtrees::IID_IDropTargetか?または、COMのIID_IDropTargetに使用する名前空間ですか?

4

2 に答える 2

1

名前の前に「::」を付けます-名前を指定します::IID_IDropTarget-これにより、グローバル名前空間からのものが必要であることをC++に効果的に通知します。

于 2010-02-10T06:53:06.777 に答える
1

COMIID_DropTargetは次のように宣言されます。

EXTERN_C const IID IID_IDropTarget;

なのでextern "C"、ルート名前空間にあります。

::IID_IDropTarget
于 2010-02-10T06:55:13.207 に答える