3 Fehler in der FileCtrl.hpp



  • Achte mal darauf, dass die filectrl.hpp als letztes(!) include eingebunden wird. Bzw., wenn du keine FileListBox o.ä. mehr einsetzt, dass die hpp aus der Include-Liste entfernt wird



  • wo sollte denn das #include der hpp stehen? in dem Formular, wo ich die filelistbox raufgepackt habe, steht sie nicht drin ...
    wird das include automatisch in den quellcode kopiert?

    Edit: Ich habe neu Compiliert, jetzt steht das include in der .h und an letzter! Stelle.
    Trotzdem bekomme ich die Fehler!

    Nochmal die Fehler:

    virtual void __fastcall DrawItem(int Index, const Types::TRect &Rect, Windows::TOwnerDrawState State);
    

    Fehler:

    [BCC32 Fehler] FileCtrl.hpp(83): E2015 Mehrdeutigkeit zwischen 'Windows' und 'Word_xp::Windows'

    Es ist 3 mal der gleiche Fehler an verschiedenen Stellen!



  • MichelM schrieb:

    warum aber das alles mit TOutlook und TWord-Komponenten zu tun haben soll verstehe ich noch nicht ...

    dann kannst du natürlich herumprobieren, bis du schwarz wirst.

    Die Erklärung steht, wenngleich etwas über den Thread verteilt, so doch ausführlich vor dir. Ich fasse noch einmal kurz zusammen:

    MichelM schrieb:

    Fehler:

    [BCC32 Fehler] FileCtrl.hpp(83): E2015 Mehrdeutigkeit zwischen 'Windows' und 'Word_xp::Windows'

    =>

    audacia schrieb:

    Ursache ist, daß du die Word XP-Typbibliothek einbindest, die einen Typen namens "Windows" definiert. Lösung: in den Projektoptionen NO_IMPLICIT_NAMESPACE_USE definieren.

    MichelM schrieb:

    Fehler bei:

    TOutlookApplication *Outlook;
    

    =>

    akari schrieb:

    Naja um das endlich mal zu klären (Ich glaube MichelM kommt selber nicht drauf), deine Deklaration muß jetzt so aussehen :

    Outlook_xp::TOutlookApplication *Outlook;
    

    Was ist daran jetzt nicht verständlich?



  • Das bringt doch alles nichts! Danach bekomme ich wieder neue andere Fehler ...

    Und warum funktioniert das Programm auch ohne NO_IMPLICIT_NAMESPACE_USE ? Das läuft seit Monaten!! Da frage ich mich doch, warum ich das brauche?

    Edit:

    Neue Fehler:

    [BCC32 Fehler] SasNeuFrm.cpp(129): E2451 Undefiniertes Symbol 'MailItemPtr'

    in Zeile

    MailItemPtr IMailItem  ;
    

    und noch zweimal Fehler mit IMailItem



  • MichelM schrieb:

    Das bringt doch alles nichts!

    Den Eindruck habe ich so langsam auch. Du tust dich nicht eben durch gute Kooperation hervor.
    Bedenke, wir versuchen, dir beim Lösen deiner Probleme behilflich zu sein.

    Die Lösungsvorschläge, die gemacht wurden, sind der beste Weg, um dieses Problem zu beheben. Die Definition von NO_IMPLICIT_NAMESPACE_USE wird ein wenig Arbeit nach sich ziehen - du mußt alle Symbole aus dem Namespace explizit qualifizeren -, aber dafür treten dann keine Mehrdeutigkeiten mehr auf.

    MichelM schrieb:

    Danach bekomme ich wieder neue andere Fehler ...

    Ich habe keine Lust, dir jede Stück Information aus der Nase zu ziehen; mit meiner Zeit kann ich sinnvolleres anfangen. Gib dir gefälligst ein wenig Mühe, lies die vorhandenen Posts, versuche sie zu verstehen, und wenn Fehler auftreten, dann poste sie inklusive der relevanten Codezeilen in aller Ausführlichkeit. Sonst kannst du selbst schauen, wie du weiterkommst.

    MichelM schrieb:

    Und warum funktioniert das Programm auch ohne NO_IMPLICIT_NAMESPACE_USE ? Das läuft seit Monaten!! Da frage ich mich doch, warum ich das brauche?

    Du weißt, was NO_IMPLICIT_NAMESPACE_USE macht. Es aktiviert oder deaktiviert eine using namespace -Anweisung.

    Wenn sie deaktiviert ist (wenn NO_IMPLICIT_NAMESPACE_USE definiert ist), mußt du den zugehörigen Namespace explizit angeben.

    Das ist zwar mehr Schreibarbeit, aber es ist hilfreich, um Mehrdeutigkeiten aus dem Wege zu gehen.



  • MichelM schrieb:

    Edit:

    Neue Fehler:

    [BCC32 Fehler] SasNeuFrm.cpp(129): E2451 Undefiniertes Symbol 'MailItemPtr'

    in Zeile

    MailItemPtr IMailItem  ;
    

    und noch zweimal Fehler mit IMailItem

    Na also, geht doch.

    "Undefiniertes Symbol" bedeutet, daß der Compiler das Symbol im aktuellen Scope nicht finden kann. Ursache ist ganz offensichtlich die Definition von NO_IMPLICIT_NAMESPACE_USE.

    -> Was macht NO_IMPLICIT_NAMESPACE_USE gleich noch?

    -> Und was mußt du tun, um den Fehler zu beheben?



  • dann muss ich vielleicht in dem aktuellen scope sagen, welchen namespace er benutzen soll?

    oh den ersten beitrag von dir hatte ich überlesen! also muss ich überall, wo jetzt fehler auftreten eine using namespace-Anweisung einfügen!



  • Nein 😞

    audacia schrieb:

    Wenn sie deaktiviert ist (wenn NO_IMPLICIT_NAMESPACE_USE definiert ist), mußt du den zugehörigen Namespace explizit angeben.

    Weißt du, was das bedeutet, einen Namespace explizit angeben?

    Falls nicht, dann lies vielleicht nocheinmal den Post von akari:

    akari schrieb:

    Naja um das endlich mal zu klären (Ich glaube MichelM kommt selber nicht drauf), deine Deklaration muß jetzt so aussehen :

    Outlook_xp::TOutlookApplication *Outlook;
    

    Outlook_xp ist ein Namespace.

    Je nachdem, wo MailItemPtr nun herkommt, mußt du eben den dortigen Namespace präfizieren. Wenn es aus Outlook_XP.h kommt, ist das Outlook_xp, wenn es aus Word_XP.h kommt, ist es Word_xp, und so fort.

    Jetzt verstanden?



  • Ja ich denke ich habe es verstanden 😉

    Aber ich dachte, wenn ich am Anfang der Prozedur using namespace Outlook_xp, dann bräuchte ich in dieser Prozedur nicht mehr Outlook_xp::MailItemPtr sondern nur MailItemPtr schreiben. Sehe ich dies falsch?



  • MichelM schrieb:

    Aber ich dachte, wenn ich am Anfang der Prozedur using namespace Outlook_xp, dann bräuchte ich in dieser Prozedur nicht mehr Outlook_xp::MailItemPtr sondern nur MailItemPtr schreiben. Sehe ich dies falsch?

    Nein. Wenn du das nur am Anfang der Prozedur machst, ist das okay.


Anmelden zum Antworten