Seite 1 von 1

Compilerfehler beim Umstellen von Codeblocks auf VC

Verfasst: 23.10.2009, 13:58
von Jonathan
Ich habe mein Projekt krzlich von Codeblocks nach VC umgestellt. Leider kriege ich es nicht hin, es richtig zu kompilieren:

Code: Alles auswählen

	// This function computes the maximal scaling of this matrix (maximum of the
	// return values of GetScalingX/Y/Z())
	inline float GetMaximalScaling() const{
		return sqrt(std::max(_11*_11+_12*_12+_13*_13, std::max(_21*_21+_22*_22+_23*_23,_31*_31+_32*_32+_33*_33)));
	}
Fehler 17 error C2589: '(': Ungültiges Token auf der rechten Seite von '::'


und:

Code: Alles auswählen

//min,max functions for Vectors,
template<typename t> Vector3<t> min(const Vector3<t>& V1, const Vector3<t>& V2)
{
	return Vector3<t>(std::min(V1.x, V2.x), std::min(V1.y, V2.y), std::min(V1.z, V2.z));
}

template<typename t> Vector3<t> max(const Vector3<t>& V1, const Vector3<t>& V2)
{
	return Vector3<t>(std::max(V1.x, V2.x), std::max(V1.y, V2.y), std::max(V1.z, V2.z));
}
Fehler 1 error C2988: Unerkannte Vorlagendeklaration/-definition

Unter Codeblocks mit MinGW hat das alles wunderbar funktioniert und ich sehe da jetzt eigentlich auch kein richtiges Problem. Hat dazu jemand eine Idee?

Re: COmpilerfehler biem umstellen von Codeblocks auf VC

Verfasst: 23.10.2009, 14:11
von Aramis
Guck mal, ob min,max nicht irgendwo in den Compiler-Headern als #define steht.

Re: COmpilerfehler biem umstellen von Codeblocks auf VC

Verfasst: 23.10.2009, 14:25
von Jörg
Am einfachsten erzeugst Du Dir dafuer ein ´preprocessed´ Source. Dort sind alle Praeprozessordirektiven aufgeloest, alle includes direkt eingebunden. Dann siehst Du sofort, was an den fraglichen Stellen passiert ist. Die VC-Complier-Option dafuer hab ich eben nicht im Kopf, aber die findest Du bestimmt auch alleine.

Re: COmpilerfehler biem umstellen von Codeblocks auf VC

Verfasst: 23.10.2009, 14:42
von eXile
Jörg hat geschrieben:Am einfachsten erzeugst Du Dir dafuer ein ´preprocessed´ Source. Dort sind alle Praeprozessordirektiven aufgeloest, alle includes direkt eingebunden. Dann siehst Du sofort, was an den fraglichen Stellen passiert ist. Die VC-Complier-Option dafuer hab ich eben nicht im Kopf, aber die findest Du bestimmt auch alleine.
Zum Beispiel hier:
http://msdn.microsoft.com/en-us/library/8z9z0bx6.aspx
http://msdn.microsoft.com/en-us/library/3xkfswhy.aspx

Re: COmpilerfehler biem umstellen von Codeblocks auf VC

Verfasst: 23.10.2009, 15:08
von Schrompf
Die Windows-Header enthalten tatsächlich #defines für min und max. Man beachte: es sind Makros, aber kleingeschrieben und zentral im Windows-Header. Mann, hab ich die damals dafür gehasst, als ich das rausgefunden habe. Um das zu vermeiden, musst Du NOMINMAX vor den Windows-Includes definieren. Etwa so:

Code: Alles auswählen

#if PLATTFORM == WINDOWS
  #define NOMINMAX
  #include <Windows_Includes.h>
#endif

Re: Compilerfehler beim Umstellen von Codeblocks auf VC

Verfasst: 24.10.2009, 02:13
von Jonathan
Hachja, das ist mal wieder toll.
Das geniale ist, dass ich die windows.h niemals selber einbinde sondern nur von mir benutzte Bibliotheken, Mit einem globalen define lässt sich das jetzt kompilieren, toll ist das aber nicht.
Und klein geschriebene Makros, dafür sollte man die mehr als einmal verprügeln...

Re: Compilerfehler beim Umstellen von Codeblocks auf VC

Verfasst: 24.10.2009, 09:41
von TGGC
Jetzt frag ich mich nur, was hat das mit VC zu tun? windows.h gehoert ja eigentlich zum Platform SDK, also solange man das nicht wechselt sollte sich dsa Verhalten auch nicht aendern. f'`8k


Gruß, TGGC (Was Gamestar sagt...)

Re: Compilerfehler beim Umstellen von Codeblocks auf VC

Verfasst: 24.10.2009, 10:32
von Jonathan
Es scheint so, dass manche der von mir benutzten Libs nur dann windows.h einbinden, wenn MSVC oder so definiert ist.
Deswegen war mir auch überhaupt nciht klar, das die Datei überhaupt irgendwo inkludiert wird.