c++ - 为什么在 .cpp 文件中包含 <string.h> 会导致编译错误(包含 .h 文件是可以的)

标签 c++

我在使用时遇到了一个奇怪的编译错误:

#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/

相关文章:

c++ - 标准库中的双向链接循环列表

c# - 任何防止 Windows 8 进入连接待机模式的 API?

c++ - cmake将中间文件放置到某个目录

c++ - 我们可以在没有#ifdef __cplusplus 的情况下在C 文件中使用extern "C"吗?

c++ - Lambda 特定变量

java - Java中c++的goto在特定场景下的等价物

c++ - 根据模板参数调用不同版本的模板成员函数

c++ - 如何更改字符串指针指向的字符?

c++ - 如何在 windowsservercore docker 容器中安装 dotnetcore

c++ - 清除类型为 'struct ' 的对象,没有简单的复制分配;改用赋值或值初始化