如何使用C ++中的标头中声明的变量和函数

时间:2012-09-09 19:21:39

标签: c++ header

首先,这可能会很混乱,因为我对编程很新 好吧,我正在进行一场RPG比赛,我希望我的所有武器都在一个名为Weapons.cpp的文件中 我这样做是为了让我在名为common.h的头文件中获得所有全局变量,例如“weaponDamage”和“weaponName”,以便我可以从main和.cpp文件中访问和操作这些变量。但问题是它似乎无法在我的标题中找到那些变量和函数。

以下是一些代码:

common.h:

#include <string>  
#ifndef COMMON_H_INCLUDED  
#define COMMON_H_INCLUDED  

//global variables  
extern int pureDamage = 0;  
extern int pureHealth = 0;  
extern int weaponDamage;  
extern int armorDefense;  
extern int totalDamage = pureDamage + weaponDamage;  
extern int totalHealth = pureHealth + armorDefense;  
extern int totalLuck;  
extern string starsign;  
extern string weaponName;  

//all weapons  

void weaponSwordIron();  
void weaponSwordGold();  
void weaponSwordSwordOfTheHeavens();  
void weaponBowSimple();  
void weaponBowLongBow();  
void weaponBowThunder();  
void weaponStaffStaffOfFlames();  
void weaponStaffStaffOfLightning();  
void weaponStaffStaffOfAssKicking();  

#endif // COMMON_H_INCLUDED  

Weapons.cpp:

#include <iostream>  
#include <string>  
#include <common.h>  


using namespace std;

void weaponSwordIron()
{
    int weaponDamage = 5;
    string weaponName = "Iron Sword";
}
void weaponSwordGold()
{
    int weaponDamage = 8;
    string weaponName = "Gold Sword";
}
void weaponSwordSwordOfTheHeavens()
{
    int weaponDamage = 15;
    string weaponName = "Sword Of The Heavens";
}
void weaponBowSimple()
{
    int weaponDamage = 5;
    string weaponName = "Simple Bow";
}
void weaponBowLongBow()
{
    int weaponDamage = 8;
    string weaponName = "Long Bow";
}
void weaponBowThunder()
{
    int weaponDamage = 15;
    string weaponName = "Thunder Bow";
}
void weaponStaffStaffOfFlames()
{
    int weaponDamage = 5;
    string weaponName = "Staff Of Flames";
}
void weaponStaffStaffOfLightning()
{
    int weaponDamage = 8;
    string weaponName = "Staff Of Lightning";
}
void weaponStaffStaffOfAssKicking()
{
    int weaponDamage = 15;
    string weaponName = "Staff Of Ass Kicking";
} 

和我的主要部分,名为GiveWeapon()的函数:

void GiveWeapon()
{

    system("cls");
    if (starsign == "mage")
    {
        weaponSwordIron();
        cout << weaponDamage;
        cout << weaponName;
    }
    else if (starsign == "warrior")
    {
        weaponBowSimple();
    }
    else if (starsign == "archer")
    {
        weaponStaffStaffOfFlames();
    }
    else
    {
        ChooseStarsign();
    }
    AssignAttributes();
}  

是的,我确实记得包括common.h 现在我的IDE Code::Blocks出现的错误是:error:common.h:没有这样的文件或目录
我不知道为什么会这样,所以请帮忙。

很抱歉这篇长篇文章并提前致谢。

5 个答案:

答案 0 :(得分:2)

使用"common.h"代替<common.h>。 有角度的用于库文件。

答案 1 :(得分:0)

您应该使用"common.h"而不是< common.h>

答案 2 :(得分:0)

weopens.cpp几乎是无意义的。

我尝试编译以下内容:

void a() {
 int b = 5; }

int main()
{
 a();
 return 0;
}

和g ++不喜欢这个想法。

答案 3 :(得分:0)

你的“common.h”放在哪里?您必须使用“Weapons.cpp”从文件夹中指定它们的相对路径。

第二,在函数中定义局部变量。您的Weapons.cpp文件必须如下所示:

#include <iostream>
#include <string>
#include "relative/path/to/common.h"

//global variables
int pureDamage = 0;
int pureHealth = 0;
int weaponDamage;
int armorDefense;
int totalDamage = pureDamage + weaponDamage;
int totalHealth = pureHealth + armorDefense;
int totalLuck;
string starsign;
string weaponName;

using namespace std;

void weaponSwordIron()
{
    weaponDamage = 5;
    weaponName = "Iron Sword";
}
void weaponSwordGold()
{
    weaponDamage = 8;
    weaponName = "Gold Sword";
}
...

答案 4 :(得分:0)

除了其他人提到的标题位置问题和局部变量阴影之外,我认为你还会遇到多个定义错误的问题:

extern int pureDamage = 0;

此声明的初始化程序会覆盖extern,因此不仅会声明此变量,还会在包含此标头的任何编译单元中定义此变量。您的链接器会抱怨。

如果你真的想在多个文件中使用全局变量,你需要在源文件中定义和初始化变量一次并在其中声明它extern(没有初始值设定项)头文件。但是,const变量是一个例外。