Pergunta

G'day a todos

Eu sou um novato no C ++ e mais ainda para o Borland Turbo C ++ Explorer. Acabei de encontrar esse erro de compilação. Alguma pista sobre como corrigi -lo?

[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'

O código em que o primeiro ocorre é

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;

    };

Algumas sugestões de outra fonte:

Como a mensagem de erro do compilador informa que existem 2 declarações do tipo de dados do itransaction no escopo da unidade de compilação. Parece que a definição de Itransaction vem da Microsoft da comsvcs.h e que o OLEDB :: ITRANSACION é uma implementação da interface Itransaction de Borland. Então você pode tentar duas coisas:

  1. Elimine a definição OLEDB :: ITRANSACION (não conheça o Turbo C ++, mas pode haver um componente que lida com OLEDB. Tente se livrar disso. Ou pode ser incluído usando outro #include. Pesquise o texto OLEDB :: Itransaction em seu diretório de incluir e você encontrará o arquivo relevante. Modifique o caminho de incluir para que não esteja mais incluído).
  2. Você pode tentar definir o Cinterface porque o código resultando no erro de compilação não será incluído se isso for definido. Mas isso pode causar outros problemas ...

Alguém tem outras sugestões?

Atenciosamente, Bruce.

Foi útil?

Solução

Não tenho idéia de como fazer com ou qual é o seu itransaction, mas parece -me que seu escopo contém dois tipos de itransação. Você pode ser mais explícito em seu protótipo de função? Você pode escovar a Itransaction que deseja usar? Diga ":: itransaction" (para usar namespace global) ou "Some_other_Namespace :: itransaction"?

Outras dicas

Ok, precisamos encerrar essa pergunta de alguma forma. Depois de atualizar o Turbo C ++ Explorer com os patches mais recentes, o problema desapareceu.

Obrigado a todos que ofereceram sugestões ao longo do caminho.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top