使用时出现奇怪的编译错误:
#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文件中放入相同的行代码,但不会出现任何错误。
我很困惑,问题是什么?
答案 0 :(得分:1)
包含.h
和.cpp
的标题之间不可能存在差异。几乎不可能。下次发布testcase(我不能强调这是多么重要)。
但是,您可能在.cpp
中包含了其他标题,其中定义了size_t
,掩盖了该错误。是的,这是一个错误。标准头文件应该单独工作,显然,在你的实现上,这个不会。
但是,既然你应该包括C ++ <cstring>
,而不是C <string.h>
,那就没有用了。
如果你这样做但仍有问题,那么你搞砸了。如果没有测试用例,我们无法分辨出它是什么。
答案 1 :(得分:0)
我并不确切知道你为什么会收到这个错误,但一般来说,<string.h>
的使用已经弃用了C ++,所以尽管它经常有效,但你不能这样做期待它。 <string>
是C ++标头,包含std
命名空间中定义的字符串类。
<string.h>
包含C字符串函数和定义。在C ++中,如果您需要这些旧功能,则应使用<cstring>
。我认为如果你在C ++中混合使用,你会遇到名称空间问题,这可能会导致你的错误。