c++中包含错误的文件
Wrong files include in c++
我在c++中包含文件时遇到了一些问题。
记录.hpp
#ifndef record_hpp
#define record_hpp
#include <stdio.h>
class record {
......
};
#endif /* record_hpp */
节点.hpp
#ifndef node_hpp
#define node_hpp
#include <stdio.h>
#include <string.h>
#include "record.hpp"
class recordNode: public record {
...... };
#endif /* node_hpp */
List.hpp
#ifndef List_hpp
#define List_hpp
#include <stdio.h>
#include "node.hpp"
class List
{.........};
#endif /* List_hpp */
节点2.hpp
#ifndef node_hpp
#define node_hpp
#include "List.hpp"
#include "node.hpp"
#include <stdio.h>
#define N 5
class node {
private:
List **key;
public:
recordNode *k;
};
在最后一个文件中,我遇到了很多问题。编译器不知道List
结构和recordNode
是什么。我不知道如何修复它。
在节点.hpp中,您在顶部定义了以下内容:
#ifndef node_hpp
#define node_hpp
在node2.hpp中,您还在顶部定义了以下内容:
#ifndef node_hpp
#define node_hpp
我建议将node2.hpp更改为
#ifndef node2_hpp
#define node2_hpp
或类似的东西,并添加
#endif /* node2_hpp */
到文件末尾。
这个东西
#ifndef record_hpp
#define record_hpp
#endif /* record_hpp */
称为Include Guard。它可以防止所包含的文件被重复包含,并可能在你可怜的毫无戒心的程序上释放递归地狱和重复定义。
考虑一下像string
这样的东西,它几乎包含在所有内容中。如果没有防护,std::string
可能会被定义数百次。这至少会减慢编译速度。在最坏的情况下,真的很奇怪的事情会发生,你会花上几个小时或几天的时间进行调试。
逻辑如下:
如果我们没有看到record_hpp(#ifndef record_hpp
),请将其标记为已看到(#define record_hpp
),并将文件中的所有内容复制到包含文件中,直到保护(#endif /* record_hpp */
)结束
在node.hpp中,该保护被称为node_hpp
。node2.hpp中使用了相同的名称,因此
#ifndef node_hpp
#define node_hpp
#include "List.hpp"
#include "node.hpp"
#include <stdio.h>
#define N 5
class node {
private:
List **key;
public:
recordNode *k;
};
将扩展到
#ifndef node_hpp
#define node_hpp
#include "List.hpp"
#ifndef node_hpp
#define node_hpp
#include <stdio.h>
#include <string.h>
#include "record.hpp"
class recordNode: public record {
...... };
#endif /* node_hpp */
#include <stdio.h>
#define N 5
class node {
private:
List **key;
public:
recordNode *k;
};
因为我们已经看到了node_hpp
,所以node_hpp
保护的第二个块将被忽略,node2.hpp将变成
#ifndef node_hpp
#define node_hpp
#include "List.hpp"
#ifndef node_hpp
#endif /* node_hpp */
#include <stdio.h>
#define N 5
class node {
private:
List **key;
public:
recordNode *k;
};
因此,recordNode
从未被定义。哎呀。
外卖永远不会重复,包括警卫。
还要注意,在node2.hpp的末尾没有#endif
来关闭include保护。这以后也会引起一些丑陋。
解决方案:
#ifndef node2_hpp
#define node2_hpp
#include "List.hpp"
#include "node.hpp"
#include <stdio.h>
#define N 5
class node {
private:
List **key;
public:
recordNode *k;
};
#endif /* node2_hpp */
更复杂的项目将需要更复杂的include-guard名称,因为很可能有两个"list.hpp",一个在代码中,另一个在第三方库中。
- 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