1

我的头文件和 cpp 文件有点问题,我开始创建一个基于文本的小游戏,我想通过为每个类创建更多文件和分隔文件(Player.cpp、Monster.cpp 实体)来使所有工作更加清晰ETC..)。

所以我最终在每个 cpp 文件中都有很多#include指令(我还没有使用头文件)。

我需要一个rand函数,所以我将stdlib添加到每个类,并将 iostream 添加到播放器类等。

所以我最终对同一个库进行了很多双重和三重使用,我应该怎么做才能避免它?有什么办法可以完全避免吗?(例如,为随机创建一个单独的类是行不通的,因为我需要以任何方式将它添加到类中)。

提前致谢!

编辑:但如果我有这样的东西?:

main.cpp -> Player.h -> stdlib.h

     -> Monster.h -> stdlib.h

我该怎么做才能使 stdlib.h 在所有类中都没有警告或错误?

换句话说,如何在不包含很多相同库的情况下创建标题?(Player 和 Monster 是不同的类,它们都需要 stdlib,我应该怎么做才能只包含一次该库?)

4

3 回答 3

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 );
于 2013-10-11T13:08:09.850 回答
1

“我还没有使用标题”是什么意思?您必须为函数声明/类定义创建标题。没有其他合理的方法。
接下来你需要阅读include guards。包含守卫确保标题不会被直接或间接地多次包含。
在几乎所有现代编译器中,您都可以使用#pragma once而不是旧的#if !defined... 样式。

于 2013-10-11T13:04:32.907 回答
1

这可能不是最好的方法,但这就是我这样做的方式有一行调用我所有的其他标题,并且该标题整理出我需要的标题。

所以

main.cpp > MasterHeader.h > myHeader.h, myOtherHeader.h, thisHeader.h

ETC

于 2013-10-11T12:57:36.293 回答