Domanda

Buongiorno a tutti

Sono un principiante di C ++ e ancora di più di Borland Turbo C ++ Explorer. Ho appena riscontrato questo errore di compilazione. Qualche indizio su come risolverlo?

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

Il codice in cui si verifica il primo è

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;

    };

Un paio di suggerimenti da un'altra fonte:

  

Come dice il messaggio di errore del compilatore, ci sono 2 dichiarazioni del tipo di dati ITransaction nell'ambito dell'unità di compilazione.   Sembra che la definizione di ITransaction provenga da Microsoft comsvcs.h e che OleDB :: ITransaction sia un'implementazione dell'interfaccia ITransaction di Borland. Quindi potresti provare 2 cose:

  1. elimina la definizione di OleDB :: ITransaction (non conosci Turbo C ++, ma potrebbe esserci un componente che ha a che fare con oleDB. Cerca di sbarazzartene. O potrebbe essere incluso usando un altro #include. Cerca il testo oledb :: ITransaction nella directory include e si spera di trovare il file pertinente. Modifica il percorso include in modo che non sia più incluso).
  2. potresti provare a definire CINTERFACE perché il codice risultante nell'errore di compilazione non verrà incluso se questo è definito. Ma ciò potrebbe causare altri problemi ...

Qualcuno ha altri suggerimenti?

Cordiali saluti, Bruce.

È stato utile?

Soluzione

Non ho idea di come fare COM o quale sia la tua ITransaction, ma mi sembra che il tuo ambito contenga due tipi di ITransaction. Puoi essere più esplicito nel tuo prototipo di funzione? Riesci a valutare l'ITransaction che desideri utilizzare? Dì " :: ITransaction " (per utilizzare lo spazio dei nomi globale) o " some_other_namespace :: ITransaction " ;?

Altri suggerimenti

Okay, dobbiamo chiudere questa domanda in qualche modo. Dopo aver aggiornato Turbo C ++ Explorer con le ultime patch, il problema è scomparso.

Grazie a tutti coloro che hanno offerto suggerimenti lungo la strada.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top