我对header和cpp文件有点问题, 我开始创建一个基于文本的小游戏,我希望通过为每个类创建更多文件和分隔文件(Player.cpp,Monster.cpp Entity等等)来使所有工作更清晰。
所以我在每个cpp文件中都有很多 #include 指令(我还没有用过标题)。
我需要一个 rand 函数,所以我将 stdlib 添加到每个类,并将iostream添加到播放器类等等。
所以我最终得到了同一个库的大量双重和三重使用,我该怎么做才能避免它? 有什么办法可以避免它吗? (创建一个单独的随机类,例如不会工作,因为我需要将它添加到类中以及任何方式。)
提前致谢!
编辑: 但如果我有这样的东西?:
main.cpp - > Player.h - > stdlib.h中
-> Monster.h -> stdlib.h
如何让stdlib.h在所有类中没有警告或错误?
换句话说,如何在不包含大量相同库的情况下创建标题? (玩家和怪物是不同的类,他们都需要stdlib,我应该怎么做只包括那个库?)
答案 0 :(得分:1)
这可能不是最好的方法,但这就是我这样做的方式 我总是有一个main.cpp文件,它调用了一个'MasterHeader.h'文件,在那个头文件中我有所有其他的头文件,所以在主要的我只有一行调用我所有的其他头文件,那个头文件排序了什么我需要的标题。
所以
main.cpp> MasterHeader.h> myHeader.h,myOtherHeader.h,thisHeader.h
等
答案 1 :(得分:1)
你对“我还没有用过标题”是什么意思?您必须为函数声明/类定义创建标头。没有其他合理的方法。
接下来,您需要阅读include guards。包括警卫确保标题不会被包括多次,直接和间接
在几乎所有现代编译器中,您都可以使用#pragma once
而不是旧的#if !defined
...样式。
答案 2 :(得分:1)
如果我弄错了,请纠正我......由于在多个点包含您自己的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 );