如何处理 CPP 文件和头文件
how to handle cpp files and header files
我对标头和 cpp 文件有点问题,我开始创建一个基于文本的小游戏,我想通过为每个类(玩家.cpp、怪物.cpp实体等(创建更多文件和单独的文件来使所有工作更加清晰。
所以我最终在每个 cpp 文件中都有很多 #include 指令(我还没有使用标头(。
我需要一个 rand 函数,所以我为每个类添加了 stdlib,在播放器类中添加了 iostream 等等。
所以我最终对同一个库有很多双重和三重使用,我应该怎么做才能避免它?有什么办法可以避免它吗?(例如,为 random 创建一个单独的类是行不通的,因为我也需要以任何方式将其添加到类中(。
提前感谢!
编辑:但是如果我有这样的东西?
main.cpp -> Player.h -> stdlib.h
-> Monster.h -> stdlib.h
我该怎么做才能使 stdlib.h 出现在所有类中而没有警告或错误?
换句话说,如何在不包含大量相同库的情况下创建标头?(玩家和怪物是不同的职业,它们都需要 stdlib,我应该怎么做才能只包含一个库?
"我还没有使用标题"是什么意思?您必须为函数声明/类定义创建标头。没有其他合理的方法。
接下来,您需要阅读有关包括警卫的信息。包含防护确保不会直接或间接多次包含标头。
在几乎所有现代编译器中,您都可以使用 #pragma once
而不是旧的#if !defined
......风格。
这可能不是最好的方法,但这是我的做法我总是有一个主文件.cpp称为"MasterHeader.h"文件,在该头文件中我有所有其他头文件,所以在主文件中我只有一行调用我所有其他头,该头整理我需要的头。
所以
main.cpp> MasterHeader.h> myHeader.h,myOtherHeader.h, thisHeader.h
等
弄错了,请纠正我...由于在多个点包含自己的 cpp 文件,您面临重新定义的错误。
一种方法是为需要包含在其他地方的代码文件创建一个标头,并在此标头中声明导出。确保使用预处理器为每个创建的对象定义一次导出
// some_file.h
#ifndef SOME_FILE_H
#define SOME_FILE_H
...
//export declarations
...
#endif
或者你避免包含你的代码文件,并将你需要的函数声明为"extern">
//your_functions.cpp
int some_function( int arg1 )
{
...
}
和
//other_file.cpp
extern int some_function( int );
- .cpp和.h文件中的模板专用化声明
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 命名空间中具有.h和.cpp文件的类
- 为什么我的主文件.cpp不打印头文件中的任何内容
- 生成文件错误 - 找不到文件 - *.cpp
- 如何在文件.cpp gtkmm中声明小部件
- 没有实现文件(.cpp)的派生类
- 如何使用"CMakeLists.txt"中的add_library将整个文件(.cpp,.h等)包含在目录中
- 如何在Linux / Windows操作系统上使用文件*.cpp一步编译下面的代码
- 关于 Linux .so 文件无法链接到主文件.cpp文件
- 文件.cpp从Windows到Linux
- Ubuntu C++ 编译器错误: g++: 错误: 文件.cpp: 没有这样的文件或目录
- 如何将文件.cpp编译为本机编译
- 使用模板类时,似乎无法包含除 main 以外的任何 cpp 文件.cpp
- 无法编译C++文件.cpp。C++98模式
- 为什么C++头文件不需要包含实现文件 (.cpp)
- 如何访问位于独立文件(.cpp)中的非成员函数
- 如何在Visual Studio Code中通过键盘快捷键切换头文件/cpp文件
- 如何将数据从stringstream写入文件(CPP)
- 为什么filestream不把空白写入文件cpp ?