Ich arbeite an einer bestehenden C++ - Codebase, die an mehreren Stellen SIZE_MAX
verwendet. Ich habe etwas refactoring gemacht und jetzt SIZE_MAX
ist nicht in einem der Module definiert. Dieses Problem trat auf, als Travis-CI versucht wurde, das Projekt unter Linux zu erstellen. Es funktionierte gut, bevor ich Sachen umstrukturierte, aber zu verfolgen, welche genauen Header-Dateien enthalten waren, ist schwierig.Welcher C++ - Standard-Header definiert SIZE_MAX?
In einem Versuch, das Problem lokal zu replizieren, habe ich eine Ubuntu VM mit dem Standard-GCC installiert und konnte es reproduzieren. Hier ist die relevante Quelle:
#include <stddef.h>
int main()
{
size_t a = SIZE_MAX;
}
Die Kommandozeile ist einfach:
g++ a.cpp
Der Fehler ist:
a.cpp: In function ‘int main()’:
a.cpp:5:16: error: ‘SIZE_MAX’ was not declared in this scope
Systeminfo:
$ uname -a
Linux quartz 3.11.0-15-generiC#25~precise1-Ubuntu SMP Thu Jan 30 17:39:31 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
$ gcc --version
gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3
Ich habe versucht, einschließlich cstdint
, stdint.h
, inttypes.h
, stdio.h
, stdlib.h
, und wahrscheinlich einige andere, und ich kann nicht herausfinden, welche spezifische Header-Datei ich für SIZE_MAX
brauche.
Es ist wichtig zu beachten, dass das Programm, das ich arbeite kompiliert gut, mit SIZE_MAX
an verschiedenen Orten verwendet, bevor ich einige Änderungen vorgenommen habe. Die Änderungen, die ich vorgenommen habe, führten dazu, dass es in eine.cpp
Quelldatei, in der es verwendet wurde, undefiniert wird (die anderen sind weiterhin in Ordnung). So gibt es einige Header-Datei auf meinem System, wo es richtig definiert ist.
Haben Sie versucht 'cstdint' ... Abschnitt * [cstdint.syn] * sagt, es sollte da sein, aber es sollte auch in' stdint.h' sein. –
@ShafikYaghmour: Ich habe, und der Compiler warnt mich, dass die Einbeziehung dieser Header erfordert die '-std = C++ 0x 'wechseln, aber das ist kein C++ 11 Programm, und ich möchte das nicht ändern. Es findet immer noch nicht "SIZE_MAX", wenn "cstdint" trotzdem eingefügt wird. –
Sehen Sie sich dieses https://groups.google.com/forum/#!msg/snap-discuss/giu_IMZndxI/CYP98BGvf7QJ – Santhucool