Problème de compilation de Borland Dev Studio 2006 Turbo C ++ Explorer [fermé]

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

  •  08-07-2019
  •  | 
  •  

Question

G'day tout le monde

Je suis un débutant en C ++ et plus encore avec Borland Turbo C ++ Explorer. Je viens de rencontrer cette erreur de compilation. Des indices sur la façon de le réparer?

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

Le code où le premier se produit est

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;

    };

Quelques suggestions d'une autre source:

  

Comme le message d'erreur du compilateur l'indique, il existe 2 déclarations du type de données ITransaction dans la portée de l'unité de compilation.   Il semble que la définition d'ITransaction provienne de comsvcs.h de Microsoft et que OleDB :: ITransaction est une implémentation de l'interface ITransaction de Borland. Donc, vous pouvez essayer 2 choses:

  1. élimine la définition de OleDB :: ITransaction (je ne connais pas Turbo C ++, mais il peut y avoir un composant traitant de oleDB. Essayez de vous en débarrasser. Ou il peut être inclus en utilisant un autre #include. Recherchez le texte. oledb :: ITransaction dans votre répertoire d’inclusion et vous espérez trouver le fichier correspondant. Modifiez le chemin d’inclusion pour qu’il ne soit plus inclus.
  2. vous pouvez essayer de définir CINTERFACE, car le code entraînant l'erreur de compilation ne sera pas inclus s'il est défini. Mais cela peut causer d’autres problèmes ...

Quelqu'un a-t-il d'autres suggestions?

Cordialement, Bruce.

Était-ce utile?

La solution

Je ne sais pas comment faire COM ni ce qu’est votre ITransaction, mais il me semble que votre portée contient deux types d’ITransaction. Pouvez-vous être plus explicite dans votre prototype de fonction? Pouvez-vous définir la transaction IT que vous souhaitez utiliser? Dites " :: ITransaction " (pour utiliser un espace de noms global) ou "some_other_namespace :: ITransaction"?

Autres conseils

D'accord, nous devons fermer cette question d'une manière ou d'une autre. Après la mise à jour de Turbo C ++ Explorer avec les derniers correctifs, le problème a disparu.

Merci à tous ceux qui ont proposé des suggestions en cours de route.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top