1

首先,这可能很混乱,因为我对一般编程很陌生。
好吧,我正在制作一个 rpg 游戏,我希望我所有的武器都放在一个名为 Weapons.cpp 的文件中。
我这样做是为了在名为 common.h 的头文件中获取所有全局变量,例如“weaponDamage”和“weaponName”,这样我就可以从我的主文件和 .cpp 文件中访问和操作这些变量。但问题是它似乎无法在我的标题中找到这些变量和函数。

这是一些代码:

常见的.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  

武器.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
现在我的 IDECode::Blocks出现的错误是:error: common.h: no such file or directory
我不知道为什么会出现这种情况,所以请帮忙。

抱歉发了这么长的帖子,并在此先感谢。

4

5 回答 5

2

使用"common.h"而不是<common.h>. 有角度的用于库文件。

于 2012-09-09T19:24:13.990 回答
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";
}
...
于 2012-09-10T06:01:47.313 回答
0

"common.h"你不应该使用< common.h>

于 2012-09-09T19:23:25.317 回答
0

weopens.cpp 大多是无意义的。

我尝试编译以下内容:

void a() {
 int b = 5; }

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

而 g++ 不喜欢这个主意。

于 2012-09-09T19:32:55.793 回答
0

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

extern int pureDamage = 0;

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

当您真的想在多个文件中使用全局变量时,您需要在源文件中定义和初始化变量一次,并在头文件中声明它extern(没有初始化程序)。const然而,变量是一个例外。

于 2017-01-29T00:09:15.777 回答