Frage

G'day jeder

Ich bin ein Neuling auf C ++ und noch mehr zu Borland Turbo C ++ Explorer. Ich habe gerade diese Compiler-Fehler aufgetreten. Irgendwelche Hinweise darauf, wie es zu beheben?

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

Der Code, in dem die ersten auftritt, ist

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;

    };

Ein paar Vorschläge aus einer anderen Quelle:

  

Wie die Fehlermeldung des Compilers dort erzählt sind zwei Erklärungen des ITransaction Datentypen in Umfang der Übersetzungseinheit.   Es scheint, die die ITransaction Definition stammt von Microsoft comsvcs.h und dass die OleDB :: ITransaction ist eine Implementierung der Schnittstelle ITransaction von Borland. So könnte man zwei Dinge versuchen:

  1. Beseitigung der OleDB :: ITransaction Definition (weiß nicht, Turbo C ++, aber es kann eine Komponente mit OLEDB zu tun sein. Versuchen Sie, diese loszuwerden. Oder es kann durch Verwendung eines anderen #include einbezogen werden. Suchen Sie den Text oledb :: ITransaction in Ihrem include-Verzeichnis, und Sie werden hoffentlich die entsprechende Datei finden. ändern Sie den Pfad enthalten, so dass es nicht enthalten ist mehr).
  2. Sie könnten versuchen, CINTERFACE zu definieren, da der Code in den Kompilierung-Fehlern ergibt, wird nicht aufgenommen werden, wenn diese definiert ist. Aber das kann andere Probleme verursachen ...

Hat jemand noch andere Vorschläge?

Mit freundlichen Grüßen, Bruce.

War es hilfreich?

Lösung

Ich habe keine Ahnung, wie COM zu tun oder was Ihre ITransaction ist, aber es scheint mir, wie Ihr Anwendungsbereich zwei ITransaction Typen enthält. Können Sie sich noch deutlicher in Ihrer Funktion Prototyp sein? Können Sie Rahmen wollen die ITransaction Sie verwenden? Sagen Sie ":: ITransaction" (Global Namespace verwenden) oder "some_other_namespace :: ITransaction"?

Andere Tipps

Okay, müssen wir diese Frage irgendwie schließen. Turbo C ++ Explorer mit den neuesten Patches Nach dem Update das Problem ging weg.

Danke an alle die Anregungen auf dem Weg angeboten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top