Fehler beim include



  • Hallo

    Ich habe eine SDI-Anwendung (MFC) und will nun mit einer Geometriebibliothek arbeiten. Ich habe mir diese runtergeladen und die C;yGeometryView.cpp inkludiert und alles funktioniert einwandfrei. Ich kann die Klassen nutzen und bin zufrieden. Nun brauche ich den include aber in einer anderen Headerdatei und wenn ich dort inkludiere bekomme ich viele Fehler a la:

    error C2226: syntax error : unexpected type 'T'

    Der Compiler springt dabei immer zu inline Funktionen mit dem Namen max und min. Anscheinend gibt es da ein Problem mit den defines für max und min. Kann ich diese verhindern und wenn ja, wie?

    Danke für eure Hilfe

    chrische



  • hmm scheint (also jetzt wegen dem variablennamen 😉 ) ne templatefunc zu sein ... zeig se her ... sonnst können wa nix sagen.



  • Hallo

    Das ist aus einer library namens wykobi und nicht von mir. Ich will mich nicht mit fremden Federn schmücken:

    template<typename T> inline T max(const T& value1, const T& value2);
       template<typename T> inline T min(const T& value1, const T& value2);
       template<typename T> inline T max(const T& value1, const T& value2, const T& value3);
       template<typename T> inline T min(const T& value1, const T& value2, const T& value3);
    

    Das sind die Übeltäter. 😉

    chrische



  • Hallo

    Es also so, dass wenn ich in eine cpp-Datei inkludiere alles in Ordnung ist und wenn ich in eine hpp-Datei inkludiere es zu Problemen mit den defines kommt.

    chrische



  • Hi,

    chrische5 schrieb:

    die C;yGeometryView.cpp inkludiert

    *.cpp's inkludiert man normalerweise ja nicht, sondern nur die Schnittstelle davon, also die *.h. Könnte vllt ein Problem mit namespaces geben. Hatte sowas komisches auch vor kurzem ...



  • Hallo

    Da habe ich wohl ein paar Wörter vergessen. Ich habe natürlich in die .cpp Datei inkludiert und nicht diese selber.

    chrische



  • Das sind doch keine Makros?! (also #define MAX(a, b) (a > b ? a : b) ) Das sind Templates und sind so wie sie da stehen korrekt! Da liegt nicht der Fehler.

    *.h, *.hpp wird inkludiert. *.cpp und *c wird für die Implementierung genutzt.



  • Hallo

    Ich habe bereist geschrieben, dass ich weiß, was inkludiert wird und was nicht. Da habe ich mich blöd ausgedrückt. Ich weiß auch, dass es sich bei denn inline-Funktionen nicht um Makros, sondern um Templatefunktionen handelt und sehe auch, dass diese korrekt sind. Das Problem könnte aber darin liegen, dass sie, da sie den selben Namen haben, irgedwie mit den defines von max und min kollidieren. Das Syntaxhighlightning zeigt mir die Funktionen auch lila an und wenn ich mit der Maus darüber stehe bleibe, dann wird mir der Code des defines angezeigt. Daher meine Mutmaßung.

    chrische



  • hmm wie wäre es dann wenn du die Makros undef's? Oder du einfach mal guckst in welchen Header die sind und ob du den Header wirklich brauchtest oder warum du den inkludiert hast.



  • #define NOMINMAX
    


  • Hallo

    Wie kann man Makros undefen?

    chrische



  • #undef MIN
    #undef MAX
    

    ... so f+r gewöhnlich 😉



  • Hallo

    Das ist wirklich leicht.

    Danke

    chrische


Anmelden zum Antworten