gpt4 book ai didi

c++ - 类作为参数错误

转载 作者:太空宇宙 更新时间:2023-11-04 15:27:10 25 4
gpt4 key购买 nike

在 Weapon.h 中,当我尝试将类“Entity*”作为参数时,它会在我编译时显示“语法错误:标识符‘Entity’”。此外,当我滚动文本“target”时,Visual C++ Express 2010 会给我文本“*target”。 Entity 类很好,我很确定它包含正确。

(我不会发布 Player.h,因为它是不必要的 - 请参阅 Library.h - 但它有一个标题保护并包含 Entity.h)

库.h:

#ifndef _LIBRARY_
#define _LIBRARY_

#include <iostream>
#include <string>
#include <cstring>
#include <cmath>
#include <cstdio>
#include <cstdarg>
#include <vector>
#include <ctime>
#include <cmath>
#include <cstdlib>
#include <map>
#include <exception>
#include <sstream>

//file includes
#include "Globals.h"
#include "Player.h"
#include "Exception.h"
#include "Weapon.h"
#include "Armour.h"
#include "Consumable.h"

//prototypes that require "Library.h"
bool Poglathon(std::vector<std::string>& text,Player *player);
bool PoglathonTown(std::vector<std::string>& text,Player *player);

std::map<std::string,Weapon*> init_weapons(void);
std::map<std::string,Armour*> init_armour(void);
std::map<std::string,Consumable*> init_consumables(void);

#endif //__LIBRARY__

武器.h:

#ifndef _WEAPON_H_
#define _WEAPON_H_

#include "Shopable.h"

class Weapon : public Shopable{
private:
int Damage;
public:
Weapon(int c,int d,std::string n) : Shopable(c,n),Damage(d){}
std::string getDesc() const{
return getName()+"\t"+tostring(Damage)+"\t"+tostring(Cost);
}
int getDamage() const{return Damage;}
int DamageTarget(Entity* target){
int DamageDealt = 0;
//do damage algorithm things here
return DamageDealt;
}
};

#endif

Shopable.h:

#ifndef _SHOPABLE_H_
#define _SHOPABLE_H_

#include "Library.h"

class Shopable{
protected:
std::string Name;
int Cost;
std::string Description;
public:
Shopable(int c, std::string n):Cost(c),Name(n){}
std::string getName() const{return Name;}
int getCost() const {return Cost;}
virtual std::string getDesc() const = 0;
};

#endif

实体.h:

#ifndef _ENTITY_
#define _ENTITY_

#include "Library.h"
#include "Weapon.h"
#include "Armour.h"
#include "Consumable.h"

class Entity{
public:
void printStats() const;
void heal(double health);
std::string name;
protected:
//player stats
double str; //strength
double wis; //wisdom
double ref; //reflex
double hp; //health points
double maxHp; //maximum health points
double i; //initiative
double inte; //intelligence
double c; //courage
int gold; //gold
int xp; //experience
int ap; //armour points
int wd; //weapon damage
int lvl; //level
int sp; //skill points
Weapon* weapon;//weapon
Armour* cArmour;//current armour
};

#endif

最佳答案

在 C++ 中,类必须在被引用之前声明。您在 Entity.h 中 #include-ing Weapon.h,但此时,编译器不知道 class Entity 的存在。

您需要更改声明的顺序,或者在 class Weapon 的“上方”添加一个前向声明。它可以简单地是:

class Entity;

这告诉编译器有一个名为 Entity 的名称。但是,它没有告诉它任何它有哪些成员,所以除了声明 Entity * 的变量之外,你实际上不能用它做任何事情>Entity &,并传递它们。

关于c++ - 类作为参数错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5857009/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com