如何处理cpp文件和头文件

时间:2013-10-11 12:54:42

标签: c++ header include

我对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,我应该怎么做只包括那个库?)

3 个答案:

答案 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 );