Problème de compilation de Borland Dev Studio 2006 Turbo C ++ Explorer [fermé]
-
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:
- é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.
- 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.
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.