0

みなさん、おはようございます

私は C++ の初心者で、Borland Turbo C++ Explorer の初心者です。このコンパイルエラーが発生しました。それを修正する方法についての手がかりはありますか?

[C++ Error] comsvcs.h(3209): E2015 Ambiguity between 'ITransaction' and 'Oledb::ITransaction'
[C++ Error] comsvcs.h(3275): E2015 Ambiguity between 'ITransaction' and 'Oledb::ITransaction'
[C++ Error] comsvcs.h(16197): E2015 Ambiguity between 'ITransaction' and 'Oledb::ITransaction'
[C++ Error] comsvcs.h(16293): E2015 Ambiguity between 'ITransaction' and 'Oledb::ITransaction'

最初のコードが発生するコードは次のとおりです。

EXTERN_C const IID IID_ICreateWithTransactionEx;

#if defined(__cplusplus) && !defined(CINTERFACE)

    MIDL_INTERFACE("455ACF57-5345-11d2-99CF-00C04F797BC9")
    ICreateWithTransactionEx : public IUnknown
    {
    public:
    virtual /* [helpstring][helpcontext] */ HRESULT STDMETHODCALLTYPE CreateInstance(
        /* [in] */ ITransaction *pTransaction,
        /* [in] */ REFCLSID rclsid,
        /* [in] */ REFIID riid,
        /* [iid_is][retval][out] */ void **pObject) = 0;

    };

別の情報源からのいくつかの提案:

コンパイラのエラー メッセージが示すように、コンパイル ユニットのスコープ内に ITransaction データ型の宣言が 2 つあります。ITransaction の定義は Microsoft の comsvc​​s.h に由来するようで、OleDB::ITransaction は Borland の ITransaction インターフェイスの実装です。したがって、次の 2 つのことを試すことができます。

  1. OleDB::ITransaction 定義を削除します (Turbo C++ はわかりませんが、oleDB を処理するコンポーネントが存在する可能性があります。これを削除してみてください。または、別の #include を使用して含まれている可能性があります。テキスト oledb:: を検索します。 ITransaction をインクルード ディレクトリに保存すると、関連するファイルが見つかると思いますが、インクルード パスを変更して、これ以上含まれないようにします)。
  2. CINTERFACE を定義すると、コンパイル エラーになるコードが含まれないため、CINTERFACE を定義してみてください。しかし、それは他の問題を引き起こす可能性があります...

他に提案はありますか?

よろしく、ブルース。

4

2 に答える 2

0

さて、どうにかしてこの質問を締めくくる必要があります。Turbo C++ Explorer を最新のパッチで更新すると、問題は解消されました。

途中で提案を提供してくれたすべての人に感謝します。

于 2008-11-16T08:45:26.907 に答える
0

COM の実行方法や ITransaction が何であるかはわかりませんが、スコープには 2 つの ITransaction タイプが含まれているようです。関数プロトタイプでもっと明示的にできますか? 使用したい ITransaction の範囲を指定できますか? "::ITransaction" (グローバル名前空間を使用するため) または "some_other_namespace::ITransaction" と言いますか?

于 2008-11-13T07:11:28.413 に答える