3 Fehler in der FileCtrl.hpp



  • MichelM schrieb:

    ick komme hier immernoch nicht weiter ...

    Fehler bei:

    TOutlookApplication *Outlook;
    

    Liest du eigentlich, was ich schreibe?

    audacia schrieb:

    Öffne mal Word_XP.h und sieh nach, was NO_IMPLICIT_NAMESPACE_USE dort macht. (Oder überlege dir einfach, was NO_IMPLICIT_NAMESPACE_USE wohl auf Deutsch heißt.)

    Problem ist, daß der Formulardesigner Namespaces nicht explizit angibt - eine bekannte Unzulänglichkeit -; es kann sein, daß du die Komponente stattdessen von Hand erstellen mußt.

    Da sind alle Informationen drin, die du brauchst, um das Problem zu verstehen und zu umgehen.

    (@akari: du liest offenbar auch nicht 😉 TOutlookApplication wird ohne explizite Qualifikation nicht gefunden, weil er zur Lösung des ursprünglichen Problemes NO_IMPLICIT_NAMESPACE_USE definiert hat.)



  • Hallo

    Ja, das "Problem" mit dem Namespace... sorry

    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;
    

    bis bald
    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;
    

    Die Deklaration erstellt aber der Designer, weil er die Komponente auf seinem Formular hat anstatt sie im Code zu erstellen. Es ist keine gute Idee, im Code, den der Designer generiert, herumzumanipulieren. Um mich nocheinmal selbst zu zitieren:

    audacia schrieb:

    Problem ist, daß der Formulardesigner Namespaces nicht explizit angibt - eine bekannte Unzulänglichkeit -; es kann sein, daß du die Komponente stattdessen von Hand erstellen mußt.



  • Hallo

    Also davon bin ich ausgegangen, das diese Deklaration manuell geschrieben werden muß, und auch die Komponente dementsprechend dynamisch implementiert wird... ist das wirklich (nochmal) erwähnenswert?

    bis bald
    akari



  • akari schrieb:

    ist das wirklich (nochmal) erwähnenswert?

    Wir hätten es ausprobieren können. "Ich hab es geändert, aber jetzt geht der Designer nicht mehr" gibt 50 Punkte für mich 😃



  • irgendwie hat das alles nichts gebracht. ich habe jetzt noch einmal eine frühere version meines programms benutzt, wo diese fehler noch nicht auftauchen. der fehler taucht auf, wenn ich eine FileListBox in mein Programm einbinde. leider taucht der fehler (die 3 fehler in der FileCtrl.hpp) auch nach löschung dieser komponente immernoch weiter auf ...
    ich werde wohl diese komponente nicht nutzen können.

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



  • 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