Borland Dev Studio 2006 Turbo C++ Explorer 编译问题 [已关闭]
-
08-07-2019 - |
题
大家好
我是 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,因为如果定义了 CINTERFACE,则不会包含导致编译错误的代码。但这可能会导致其他问题......
有人还有其他建议吗?
亲切问候 布鲁斯。
解决方案
我不知道如何执行 COM 或您的 ITransaction 是什么,但在我看来,您的范围包含两种 ITransaction 类型。你的函数原型能更明确一些吗?您可以确定要使用的 ITransaction 的范围吗?说“::ITransaction”(使用全局命名空间)或“some_other_namespace::ITransaction”?
其他提示
好吧,我们需要以某种方式结束这个问题。使用最新补丁更新 Turbo C++ Explorer 后,问题就消失了。
感谢一路上提出建议的所有人。
不隶属于 StackOverflow