Problema de compilación de Borland Dev Studio 2006 Turbo C ++ Explorer [cerrado]

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

  •  08-07-2019
  •  | 
  •  

Pregunta

G'day todos

Soy un novato en C ++ y más aún en Borland Turbo C ++ Explorer. Acabo de encontrar este error de compilación. ¿Alguna pista sobre cómo solucionarlo?

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

El código donde ocurre el primero es

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 par de sugerencias de otra fuente:

  

Como el mensaje de error del compilador dice que hay 2 declaraciones del tipo de datos ITransaction en el alcance de la unidad de compilación.   Parece que la definición de ITransaction proviene de comsvcs.h de Microsoft y que OleDB :: ITransaction es una implementación de la interfaz ITransaction de Borland. Entonces podrías probar 2 cosas:

  1. elimine la definición de OleDB :: ITransaction (no conoce Turbo C ++, pero puede haber un componente relacionado con oleDB. Intente deshacerse de esto. O puede incluirlo usando otro #include. Busque el texto oledb :: ITransaction en su directorio de inclusión y con suerte encontrará el archivo relevante. Modifique la ruta de inclusión para que ya no se incluya).
  2. podría intentar definir CINTERFACE porque el código que resulta en el error de compilación no se incluirá si está definido. Pero eso puede causar otros problemas ...

¿Alguien tiene alguna otra sugerencia?

Saludos cordiales, Bruce.

¿Fue útil?

Solución

No tengo idea de cómo hacer COM o cuál es su ITransaction, pero me parece que su alcance contiene dos tipos de ITransaction. ¿Puedes ser más explícito en tu prototipo de función? ¿Puede determinar la ITransaction que desea usar? Diga " :: ITransaction " (para usar el espacio de nombres global) o " some_other_namespace :: ITransaction " ;?

Otros consejos

Bien, necesitamos cerrar esta pregunta de alguna manera. Después de actualizar Turbo C ++ Explorer con los últimos parches, el problema desapareció.

Gracias a todos los que ofrecieron sugerencias en el camino.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top