Compiler findet Typ nicht



  • Hallo,

    ich bin hier am verzweifeln an einer Fehlermeldung. Ich habe einen Header Matrix4.h, der grob so aussieht:

    namespace m3d {
    
    template <class T>
    class Matrix4 {
    ...
    };
    
    typedef Matrix4<float>  Mat4;
    typedef Matrix4<double> Mat4d;
    
    }
    

    Und den benutze ich jetzt in Util.h:

    #include "m3d/Vector3.h"
    #include "m3d/Matrix4.h"
    
    namespace m3d {
    
    class MathUtil {
    
    public:
    static void extractEulerAnglesXYZ(const Mat4& rotationMatrix, float& xAngle, float& yAngle, float& zAngle);  // Zeile A
    
    };
    
    }
    

    Wenn ich Util.cpp kompiliere, klappt alles. Versuche ich jedoch die Anwendung zu bauen (sprich Linken), liefert Zeile A diese Meldung:

    error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
    1>mathutil.h(72): error C2143: syntax error : missing ',' before '&'

    Was is da falsch? Ich habe doch den Header inkludiert und Mat4 als auch MathUtil liegen doch im selben Namespace! 😕



  • Zeig mal ein wenig mehr.

    BTW: Ich glaube kaum, dass es dein Problem löst, aber versuch mal ein typename vor den Mat4 in Util.h ...



  • Was soll ich denn noch zeigen? Das ist doch der gesamte relevante Code.

    Seltsamer benutze ich in anderen Dateien auch Mat4 als Parameter und da geht es. Wieso geht es nicht in Util?! 😕



  • vielleicht ein kompilierbares minimalbeispiel??



  • Laut der Fehlermeldung sind da rund 70 Zeilen vor der Funktionsdeklaration. Da könnte sich der Fehler befinden.
    Eine zweite Möglichkeit wäre der sehr beliebte Fehler des gegenseitigen inkludes: wenn Vectror3 oder Matrix4 Util (oder doch mathutil?) benutzt, könnte das das Problem sein.



  • manni66 schrieb:

    Eine zweite Möglichkeit wäre der sehr beliebte Fehler des gegenseitigen inkludes: wenn Vectror3 oder Matrix4 Util (oder doch mathutil?) benutzt, könnte das das Problem sein.

    Genau das wars! Danke! 🙂 👍



  • Sirrii schrieb:

    Versuche ich jedoch die Anwendung zu bauen (sprich Linken), liefert Zeile A diese Meldung:

    [...] error C2143: [...]

    Merke: Cxxxx-Fehler sind im MSVC immer Compilerfehler, keine Linkerfehler. Du bekommst den Fehler also nicht beim Linken, sondern schon beim Übersetzen. Vermutlich nicht beim Übersetzen der Util.cpp, sondern irgendeiner anderen .cpp.


Anmelden zum Antworten