Frage

Ich sehe seltsame Fehler, wenn mein C++-Code min()- oder max()-Aufrufe enthält.Ich verwende Visual C++-Compiler.

War es hilfreich?

Lösung

Überprüfen Sie, ob Ihr Code das enthält Windows.h Header-Datei und entweder Ihr Code oder andere Header von Drittanbietern haben ihre eigenen Mindest()/max() Definitionen.Wenn ja, dann stellen Sie Ihre voran Windows.h Inklusion mit einer Definition von NOMINMAX so was:

#define NOMINMAX
#include <windows.h>

Andere Tipps

Eine andere Möglichkeit könnten Nebenwirkungen sein.Die meisten Min/Max-Makros enthalten die Parameter mehrfach und erfüllen möglicherweise nicht das, was Sie erwarten.Es könnten auch Fehler und Warnungen generiert werden.

max(a,i++) expands as ((a) > (i++) ? (a) : (i++))

danach ist i entweder plus 1 oder plus 2

Die () in der Erweiterung sollen Probleme vermeiden, wenn Sie sie mit Formeln aufrufen.Versuchen Sie, max(a,b+c) zu erweitern.

Da Windows dies als Makro im Funktionsstil definiert, ist die folgende Problemumgehung verfügbar:

int i = std::min<int>(3,5);

Das funktioniert, weil das Makro min() wird nur erweitert, wenn min wird gefolgt von (, und nicht, wenn darauf gefolgt wird <.

Pfui...Schau es dir an, Alter: std::min(), std::max().

Ich habe es seit Jahren nicht mehr verwendet, aber aus dem Gedächtnis heraus weist Boost möglicherweise auch Min- und Max-Werte zu?

Ehrlich gesagt finde ich es am besten, wenn es um Min/Max geht, einfach mein eigenes zu definieren:

#define min(a,b) ((a) < (b) ? (a) : (b))
#define max(a,b) ((a) >= (b) ? (a) : (b))
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top