3 Fehler in der FileCtrl.hpp



  • Frage: Wo genau soll ich NO_IMPLICIT_NAMESPACE_USE definieren?



  • Wo genau stelle ich dieses ...NAMESPACE... ein? Ich habe das nicht finden können!!



  • In C++Builder 2010: Projekt|Optionen...|Verzeichnisse und Bedingungen|Bedingungen.



  • Danke, das hat funktioniert, dafür bekomme ich jetzt den nächsten Fehler ...

    [BCC32 Fehler] RechnungErstellenFrm.h(144): E2303 Typname erwartet

    bei der Codezeile:

    TWordApplication *WordApp;
    


  • Eigeninitiative?

    Ö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.



  • Ich habe gar keine Word_XP.h in meinem Projekt eingebunden, vielleicht liegt es ja daran ...
    Mich wundert es nur, dass jetzt plötzlich dieser Fehler auftaucht, obwohl ich nicht wirklich was verändert habe am Projekt ... vorher liefs ja ganz normal!

    Ich habe eine Outlook_XP_srvr.h eingebunden, in der das steht:

    };     // namespace Outlook_xp
    
    #if !defined(NO_IMPLICIT_NAMESPACE_USE)
    using  namespace Outlook_xp;
    


  • ick komme hier immernoch nicht weiter ...

    Fehler bei:

    TOutlookApplication *Outlook;
    

    und zwar

    [BCC32 Fehler] RasNeuFrm.h(96): E2303 Typname erwartet
    [BCC32 Fehler] RasNeuFrm.h(96): E2139 In Deklaration fehlt ;
    [BCC32 Fehler] RasNeuFrm.h(96): E2109 Kein zulässiger Typ

    Habe hier aber eine TOutlookApplication mit Name Outlook in meinem Programm ...



  • Hallo

    An der Stelle wo der Fehler vom Compiler gemeldet wird, ist der Typ TOutlookApplication nicht bekannt (egal ob er wo anders schon bekannt ist). Also fehlt dort ein entsprechendes include auf den Header aus der VCL.

    bis bald
    akari



  • wahrscheinlich ist meine frage jetzt blöd, aber was für ein include soll da denn fehlen?

    #include "Outlook_XP_srvr.h" und #include "Word_XP_srvr.h" sind in der Datei ...



  • 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.


Anmelden zum Antworten