Borland Dev Studio 2006 Turbo C ++ Explorer编译问题

时间:2008-11-13 04:24:52

标签: compilation turbo-c++

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的comsvc​​s.h,而OleDB :: ITransaction是Borland的ITransaction接口的实现。所以你可以尝试两件事:

  1. 消除OleDB :: ITransaction定义(不知道Turbo C ++,但可能有一个组件处理oleDB。尝试摆脱这个。或者可以通过使用另一个#include来包含它。搜索文本你的include目录中的oledb :: ITransaction,你希望找到相关的文件。修改包含路径,使其不再包括在内。)
  2. 您可以尝试定义CINTERFACE,因为如果定义了导致编译错误的代码,则不会包含该代码。但这可能会导致其他问题......
  3. 有没有人有任何其他建议?

    亲切的问候, 布鲁斯。

2 个答案:

答案 0 :(得分:0)

我不知道如何做COM或你的ITransaction是什么,但在我看来你的范围包含两个ITransaction类型。你能在函数原型中更明确吗?您可以确定要使用的ITransaction的范围吗?说“:: ITransaction”(使用全局命名空间)或“some_other_namespace :: ITransaction”?

答案 1 :(得分:0)

好的,我们需要以某种方式关闭这个问题。使用最新补丁更新Turbo C ++ Explorer后,问题就消失了。

感谢所有在此过程中提出建议的人。