C++ C++'&书信电报;类名>;尚未声明';和'&书信电报;类名>;没有字段<;字段名>';错误
我在为课堂做作业,我发现了奇怪的编译错误 错误是:C++ C++'&书信电报;类名>;尚未声明';和'&书信电报;类名>;没有字段<;字段名>';错误,c++,C++,我在为课堂做作业,我发现了奇怪的编译错误 错误是:error:“Noble”尚未声明并且错误:类“Warrior”没有任何名为“pBoss”的字段
error:“Noble”尚未声明
并且错误:类“Warrior”没有任何名为“pBoss”的字段
<我是C++新手,所以我真的没有得到我在这里做的错误——我好像声明了类和所有成员字段。
#include <vector>
#include <iostream>
#include <ostream>
using namespace std;
class Warrior {
public:
Warrior(string name, double str) : name(name), strength(str), pBoss(nullptr) {}
bool hire(Noble* noble) { }
bool fire(Noble* noble) { }
void lost() { }
void won(double damageRatio) { }
string getName() const { return name; }
double getStrength() const { return strength; }
Noble* getBoss() const { return pBoss; }
void display(ostream& os = cout) const { }
private:
string name;
double strength;
Noble* pBoss;
};
class Noble {
public:
Noble(string name) : name(name), alive(true) {}
bool hire(Warrior& war) { }
bool fire(Warrior& war) { }
bool battle(Noble& enemy) { }
void display(ostream& os = cout) const { }
private:
vector<Warrior*> army;
string name;
double strength;
bool alive;
void lost() { }
void won(double damage) { }
};
#包括
#包括
#包括
使用名称空间std;
阶级战士{
公众:
战士(字符串名,双str):名称(name),强度(str),pBoss(nullptr){}
布尔郡(贵族*贵族){}
布尔火(贵族*贵族){}
void lost(){}
void won(双重损害){}
字符串getName()常量{return name;}
double getStrength()常量{返回强度;}
Noble*getBoss()常量{return pBoss;}
无效显示(ostream&os=cout)常量{}
私人:
字符串名;
双倍力量;
Noble*pBoss;
};
贵族阶级{
公众:
Noble(字符串名称):name(名称),alive(true){}
布尔雇佣(战士与战争){}
布尔火(战士与战争){}
布尔战役(贵族与敌人){}
无效显示(ostream&os=cout)常量{}
私人:
矢量军;
字符串名;
双倍力量;
布尔活着;
void lost(){}
无效赢得(双重伤害){}
};
我拿出了功能描述,所以这不会太长,但如果有什么我没有包括,请告诉我,我会更新后
战士
不知道什么是贵族。您需要转发声明Noble
。将其置于战士
声明之前:
class Noble;
class Warrior { ...
此外,您在Warrior
构造函数中拼写错误了pBoss
,请将构造函数更改为:
Warrior(string name, double str) : name(name), strength(str), pBoss(nullptr) {}
最后,在
显示
声明之后,Noble
中浮动着一个额外的右括号。在定义战士
时,Noble
尚未定义。C++逐行工作。要解决这个问题,可以向前声明类
// forward declaration
class Warrior;
class Noble;
class Warrior {
// ...
};
class Noble {
// ...
};
看起来你的贵族阶级可能会有一个额外的支柱:
class Noble {
public:
Noble(string name) : name(name), alive(true) {}
bool hire(Warrior& war) { }
bool fire(Warrior& war) { }
bool battle(Noble& enemy) { }
void display(ostream& os = cout) const { }
} // <-- out of place?
private:
vector<Warrior*> army;
string name;
double strength;
bool alive;
void lost() { }
void won(double damage) { }
};
classnoble{
公众:
Noble(字符串名称):name(名称),alive(true){}
布尔雇佣(战士与战争){}
布尔火(战士与战争){}
布尔战役(贵族与敌人){}
无效显示(ostream&os=cout)常量{}
}//查找转发声明。(提示:boolhire(Noble*Noble){}
编译器此时不知道Noble
是什么)它不知道,因为它被称为pBoss哦,糟了,这是我写这篇文章的错误。。。这都是代码中的pBoss。