我在使用时遇到了一个奇怪的编译错误:
#include <string.h>
在 .cpp 文件中:
/usr/include/string.h:47:8: error: ‘size_t’ has not been declared
size_t __n) __THROW __nonnull ((1, 2));
^
/usr/include/string.h:50:56: error: ‘size_t’ has not been declared
extern void *memmove (void *__dest, const void *__src, size_t __n)
^
/usr/include/string.h:59:18: error: ‘size_t’ has not been declared
int __c, size_t __n)
^
/usr/include/string.h:66:42: error: ‘size_t’ has not been declared
extern void *memset (void *__s, int __c, size_t __n) __THROW __nonnull ((1)); /usr/include/string.h:47:8: error: ‘size_t’ has not been declared
size_t __n) __THROW __nonnull ((1, 2));
^
/usr/include/string.h:50:56: error: ‘size_t’ has not been declared
extern void *memmove (void *__dest, const void *__src, size_t __n)
^
/usr/include/string.h:59:18: error: ‘size_t’ has not been declared
int __c, size_t __n)
^
/usr/include/string.h:66:42: error: ‘size_t’ has not been declared
extern void *memset (void *__s, int __c, size_t __n) __THROW __nonnull ((1));
^
/usr/include/string.h:69:56: error: ‘size_t’ has not been declared
extern int memcmp (const void *__s1, const void *__s2, size_t __n)
^
/usr/include/string.h:69:56: error: ‘size_t’ has not been declared
extern int memcmp (const void *__s1, const void *__s2, size_t __n)
将同一行代码放入.h文件中,不会报错。
我很困惑,问题是什么?
最佳答案
这里不可能包含来自 .h
的标题之间的区别。来自 .cpp
.根本不可能。下次发个testcase (我无法强调这有多重要)。
但是,您可能在 .cpp
中包含一些其他 header ,它定义了 size_t
,掩盖错误。是的,这是一个错误。标准 header 应该独立工作,显然,在您的实现中,这个 header 不能。
但是,因为您应该包括 C++ <cstring>
, 不是 C <string.h>
, 这是没有实际意义的。
如果你这样做了,但仍然有问题,那么你就把事情搞砸了。如果没有测试用例,我们无法判断那是什么。
关于c++ - 为什么在 .cpp 文件中包含 <string.h> 会导致编译错误(包含 .h 文件是可以的),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31508338/