大家好
我是 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;
};
来自另一个来源的一些建议:
正如编译器的错误消息所说,在编译单元的范围内有 2 个 ITransaction 数据类型的声明。似乎 ITransaction 定义来自 Microsoft 的 comsvcs.h,而 OleDB::ITransaction 是 Borland 的 ITransaction 接口的实现。所以你可以尝试两件事:
- 消除 OleDB::ITransaction 定义(不知道 Turbo C++,但可能有一个组件处理 oleDB。尝试摆脱它。或者它可能通过使用另一个#include 来包含。搜索文本 oledb:: ITransaction 在您的包含目录中,您将有望找到相关文件。修改包含路径,使其不再包含)。
- 您可以尝试定义 CINTERFACE 因为如果定义了导致编译错误的代码将不包括在内。但这可能会导致其他问题...
有没有人有任何其他建议?
亲切的问候,布鲁斯。