みなさん、おはようございます
私は 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 の comsvcs.h に由来するようで、OleDB::ITransaction は Borland の ITransaction インターフェイスの実装です。したがって、次の 2 つのことを試すことができます。
- OleDB::ITransaction 定義を削除します (Turbo C++ はわかりませんが、oleDB を処理するコンポーネントが存在する可能性があります。これを削除してみてください。または、別の #include を使用して含まれている可能性があります。テキスト oledb:: を検索します。 ITransaction をインクルード ディレクトリに保存すると、関連するファイルが見つかると思いますが、インクルード パスを変更して、これ以上含まれないようにします)。
- CINTERFACE を定義すると、コンパイル エラーになるコードが含まれないため、CINTERFACE を定義してみてください。しかし、それは他の問題を引き起こす可能性があります...
他に提案はありますか?
よろしく、ブルース。