【发布时间】:2015-05-27 03:38:21
【问题描述】:
我正在开发一个现有的 C++ 代码库,该代码库恰好在几个地方使用了SIZE_MAX。我做了一些重构,现在SIZE_MAX 没有在其中一个模块中定义。当Travis-CI 尝试在 Linux 上构建项目时出现此问题。在我重构之前它工作得很好,但是很难跟踪包含了哪些确切的头文件。
为了在本地复制问题,我安装了一个带有默认 gcc 的 Ubuntu VM,并且能够重现它。以下是相关来源:
#include <stddef.h>
int main()
{
size_t a = SIZE_MAX;
}
命令行很简单:
g++ a.cpp
错误是:
a.cpp: In function ‘int main()’:
a.cpp:5:16: error: ‘SIZE_MAX’ was not declared in this scope
系统信息:
$ 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
我尝试过包括cstdint、stdint.h、limits.h、inttypes.h、stdio.h、stdlib.h,可能还有其他一些,但我不知道我需要哪个特定的头文件SIZE_MAX.
重要的是要注意,在我进行一些更改之前,我正在处理的程序编译良好,SIZE_MAX 已在各个地方使用。我所做的更改导致它在 one .cpp 使用它的源文件中变得未定义(其他人继续没问题)。所以在我的系统上存在正确定义的 some 头文件。
【问题讨论】:
-
你试过
cstdint...部分[cstdint.syn]说它应该在那里,但它也应该在stdint.h中。 -
@ShafikYaghmour:我有,编译器警告我包含该标头需要
-std=c++0x开关,但这不是 C++11 程序,我不想更改它.无论如何,当包含cstdint时,它仍然无法找到SIZE_MAX。 -
@iammilind:我已经阅读了这个问题。它不是重复的。这个问题是理解
SIZE_MAX的含义,而我的问题与我需要包含哪个头文件有关。 -
@Santhucool:这很有趣,但似乎特定于我不熟悉的一个名为 SNAP 的软件包,而且我不清楚如何修复我的程序。