Tôi đang làm việc trên một codebase C++ hiện có xảy ra để sử dụng SIZE_MAX
ở một vài nơi. Tôi đã làm một số refactoring và bây giờ SIZE_MAX
không được định nghĩa trong một trong các mô-đun. Vấn đề này xuất hiện khi Travis-CI cố gắng xây dựng dự án trên Linux. Nó làm việc tốt trước khi tôi refactored công cụ, nhưng truy tìm các tập tin tiêu đề chính xác đã được bao gồm là khó khăn.Tiêu đề chuẩn C++ nào định nghĩa SIZE_MAX?
Trong một nỗ lực để nhân rộng vấn đề cục bộ, tôi đã cài đặt một máy ảo Ubuntu với gcc mặc định và có thể tái tạo nó. Dưới đây là các nguồn có liên quan:
#include <stddef.h>
int main()
{
size_t a = SIZE_MAX;
}
Các dòng lệnh đơn giản là:
g++ a.cpp
Lỗi này là: info
a.cpp: In function ‘int main()’:
a.cpp:5:16: error: ‘SIZE_MAX’ was not declared in this scope
hệ thống:
$ 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
Tôi đã cố gắng bao gồm cstdint
, stdint.h
, limits.h
, inttypes.h
, stdio.h
, stdlib.h
và có thể một số khác và tôi không thể tìm ra tệp tiêu đề cụ thể nào tôi cần cho SIZE_MAX
. Điều quan trọng cần lưu ý là chương trình tôi đang làm việc trên tiền phạt biên soạn, với SIZE_MAX
được sử dụng ở nhiều nơi khác nhau, trước khi tôi thực hiện một số thay đổi. Những thay đổi tôi đã thực hiện khiến nó trở thành không xác định trong một.cpp
tệp nguồn nơi tệp được sử dụng (các tệp khác tiếp tục được sử dụng). Vì vậy, tồn tại một số tệp tiêu đề trên hệ thống của tôi nơi tệp được xác định chính xác.
Bạn đã thử 'cstdint' ... section * [cstdint.syn] * nói rằng nó nên ở đó nhưng nó cũng phải ở trong' stdint.h'. –
@ShafikYaghmour: Tôi có, và trình biên dịch cảnh báo tôi rằng bao gồm tiêu đề đó yêu cầu chuyển đổi '-std = C++ 0x', nhưng đây không phải là chương trình C++ 11 và tôi không muốn thay đổi điều đó. Nó vẫn không tìm thấy 'SIZE_MAX' khi bao gồm' cstdint'. –
Hãy xem https://groups.google.com/forum/#!msg/snap-discuss/giu_IMZndxI/CYP98BGvf7QJ – Santhucool