Syntax-Fehler mit std::numeric_limits::max
Ich habe Klasse struct-definition wie folgt:
#include <limits>
struct heapStatsFilters
{
heapStatsFilters(size_t minValue_ = 0, size_t maxValue_ = std::numeric_limits<size_t>::max())
{
minMax[0] = minValue_; minMax[1] = maxValue_;
}
size_t minMax[2];
};
Das problem ist, dass ich kann 'std::numeric_limits::max ()" verwendet und der compiler sagt:
Error 8 error C2059: syntax error : '::'
Error 7 error C2589: '(' : illegal token on right side of '::'
Den compiler, die ich verwende, ist Visual C++ 11 (2012)
Nicht reproduzieren können. Versuchen Sie, einschließlich
Ich bin nicht mit std für size_t in meinem code. Sollte ich das tun?
Welche compiler verwenden Sie? Ich benutze Visual C++ 11 (2012)
prüfen Sie, ob Sie irgendwo
ja! du hast Recht! es hat geklappt! 🙂
<cstddef>
.Ich bin nicht mit std für size_t in meinem code. Sollte ich das tun?
Welche compiler verwenden Sie? Ich benutze Visual C++ 11 (2012)
prüfen Sie, ob Sie irgendwo
#define max(a,b)
oder ähnliches hinzu, oder fügen Sie #undef max
vor struct ifxHeapStatsFilters
zu prüfen, ob es das Thema hierja! du hast Recht! es hat geklappt! 🙂
InformationsquelleAutor mmostajab | 2014-12-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dein problem wird verursacht durch die
<Windows.h>
- header-Datei enthält makro-Definitionen benanntmax
undmin
:Sehen diese definition der Präprozessor ersetzt die
max
Bezeichner in dem Ausdruck:durch die makro-definition, die schließlich führt zu ungültigen syntax:
berichtet in den compiler-Fehler:
'(' : illegal token on right side of '::'
.Als Problemumgehung können Sie die
NOMINMAX
definieren, um compiler-flags (oder die übersetzung der Einheit, vor, einschließlich der header):oder wickeln Sie den Aufruf
max
mit Klammer, die verhindert, dass die makro-expansion:oder
#undef max
vor dem Aufrufnumeric_limits<size_t>::max()
:NOMINMAX
verursachen neue Probleme, da die min/max Makros werden benötigt/verwendet/erwartet von vielen anderen Windows-Header...InformationsquelleAutor Piotr Skotnicki
Andere Leute sagen, das problem ist, dass in
<WinDefs.h>
(im Lieferumfang von<windows.h>
) definiert ein macromin
undmax
, aber wenn Sie sehen es in der Erklärung:du wirst sehen, dass, wenn es definiert ist, wird das makro
NOMINMAX
dannWinDefs.h
wird nicht produzieren diese ein macro.Deshalb wäre es besser, fügen Sie ein definieren
NOMINMAX
zu Projekt.InformationsquelleAutor borisbn