在使用
时,我有一个奇怪的编译错误:#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
的标头之间是不可能有区别的。简直是不可能的。下次,发布一个测试用例(我不能强调这有多重要)。
.cpp
中包含一些其他头,它定义了size_t
,从而掩盖了错误。是的,这是一个bug。标准头文件应该独立工作,显然,在你的实现中,这个不是。
然而,因为你应该包括c++ <cstring>
,而不是C <string.h>
,这是没有意义的。
如果你这样做了,仍然有问题,那么你把事情搞砸了。如果没有测试用例,我们无法判断这是什么
我不知道为什么你会得到这个错误,但一般来说,<string.h>
的使用是不赞成的c++,所以虽然它经常工作,你不能指望它。<string>
是c++头文件,包含在std
命名空间中定义的string类。
<string.h>
包含C字符串函数和定义。在c++中,如果你想要那些旧的函数,你应该使用<cstring>
。我认为如果你在c++中混合了一些东西,你会得到命名空间问题等,这可能会导致你的错误。