为什么在.cpp文件中包含 <string.h>会导致编译错误(而包含它 .h 文件是可以的)
Why including <string.h> in .cpp file causes compilation errors (while including it .h file is ok)
在使用
时,我有一个奇怪的编译错误:#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++中混合了一些东西,你会得到命名空间问题等,这可能会导致你的错误。
相关文章:
- C++系统找不到指定的文件错误
- C++语法头文件错误
- C++生成文件错误"implicit entry/start for main executable"
- C++/生成文件错误:未定义对"main"的引用
- VS2019:资源文件错误:中性(默认)(未知子语言:0x8)
- C++程序不制作文件(错误)
- 安卓工作室 |CPP 文件错误错误: 位图库中对"AndroidBitmap_unlockPixels"的未定义引用
- "what does ":*** [可执行文件] 错误 1 " mean ?"
- 如何修复使用VScode调试器gcc调试时的"找不到文件"错误
- 在课堂上创建了一个朋友,给出"无输入文件"错误
- Qt .exe文件错误
- c++ 添加具有写入文件错误的文本变量
- 无法转换 .CATPart 文件.错误:输入文件路径似乎包含不支持的字符
- 写入文本文件错误,QT
- C++写入文件错误
- Windows Subsystem for Linux (WSL) 下的间歇性随机"找不到文件"错误
- 犰狳读取MAT文件错误
- 无法求解FullPathForFilename:COCOS2DX中可能缺少文件错误
- C Wininet FTP列出了许多文件错误
- 生成文件错误 - 找不到文件 - *.cpp