G'day大家
我是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接口的实现。所以你可以尝试两件事:
有没有人有任何其他建议?
亲切的问候, 布鲁斯。
答案 0 :(得分:0)
我不知道如何做COM或你的ITransaction是什么,但在我看来你的范围包含两个ITransaction类型。你能在函数原型中更明确吗?您可以确定要使用的ITransaction的范围吗?说“:: ITransaction”(使用全局命名空间)或“some_other_namespace :: ITransaction”?
答案 1 :(得分:0)
好的,我们需要以某种方式关闭这个问题。使用最新补丁更新Turbo C ++ Explorer后,问题就消失了。
感谢所有在此过程中提出建议的人。