2008-11-13 39 views
0

天兒真好大家Borland的開發工作室2006年的Turbo C++編譯瀏覽器問題

我是一個新手,C++,甚至更使Borland公司的Turbo C++資源管理器。我剛剛遇到了這個編譯錯誤。任何線索如何解決它?

[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定義來自微軟的comsvc​​s.h,並且OleDB :: ITransaction是來自Borland的ITransaction接口的實現。所以,你可以嘗試兩件事情:

  1. 消除OLEDB :: ITransaction定義(不知道的Turbo C++,但也有可能是處理OLEDB組件嘗試擺脫這種否則可能。通過使用另一個#include包含它,在你的include目錄中搜索文本oledb :: ITransaction,你將會找到相關的文件,修改include路徑使它不再被包含)。
  2. 您可以嘗試定義CINTERFACE,因爲如果定義了該錯誤,則不會包含導致編譯錯誤的代碼。但這可能會導致其他問題...

有沒有人有任何其他建議?

親切的問候, 布魯斯。

回答

0

我不知道如何做COM或你的ITransaction是什麼,但在我看來,你的範圍包含兩個ITransaction類型。你可以在你的函數原型中更明確嗎?您能否確定您想要使用的ITransaction的範圍?說「:: ITransaction」(使用全局命名空間)或「some_other_namespace :: ITransaction」?

+0

好主意。試試吧! – bugmagnet 2008-11-13 08:57:23

0

好的,我們需要以某種方式關閉這個問題。使用最新的補丁更新Turbo C++ Explorer後,問題就消失了。

感謝所有提供一路上的建議。