Problema di compilazione Explorer Borland Dev Studio 2006 Turbo C ++ [chiuso]
-
08-07-2019 - |
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:
- 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).
- 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.
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.