Проблема компиляции в Borland Dev Studio 2006 Turbo C ++ Explorer [закрыто]

StackOverflow https://stackoverflow.com/questions/286253

  •  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 взято из comsvcs.h от Microsoft, и что OleDB :: ITransaction является реализацией интерфейса ITransaction от Borland. Таким образом, вы можете попробовать 2 вещи:

<Ол>
  • исключить определение OleDB :: ITransaction (не знаю Turbo C ++, но может быть компонент, имеющий дело с oleDB. Попробуйте избавиться от этого. Или его можно включить с помощью другого #include. Поиск текста oledb :: ITransaction в вашем каталоге включений, и вы, вероятно, найдете соответствующий файл. Измените путь включения, чтобы он больше не включался).
  • вы можете попытаться определить CINTERFACE, потому что код, приводящий к ошибке компиляции, не будет включен, если он определен. Но это может вызвать другие проблемы ...
  • У кого-нибудь есть другие предложения?

    С уважением, Брюс.

    Это было полезно?

    Решение

    Я понятия не имею, как сделать COM или какова ваша ITransaction, но мне кажется, что ваша сфера содержит два типа ITransaction. Можете ли вы быть более явным в своем прототипе функции? Можете ли вы охватить ту транзакцию, которую хотите использовать? Скажите ":: ITransaction" (для использования глобального пространства имен) или "some_other_namespace :: ITransaction"?

    Другие советы

    Хорошо, нам нужно как-то закрыть этот вопрос. После обновления Turbo C ++ Explorer до последних исправлений проблема исчезла.

    Спасибо всем, кто предлагал предложения по пути.

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top