C ++'<class name =“”>尚未声明'且'<class name =“”>没有字段<field name =“”>'errors

时间:2018-02-22 17:53:06

标签: c++

我正在为课程做作业,我得到了奇怪的编译错误。

错误在于error: 'Noble' has not been declarederror: class 'Warrior' does not have any field named '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) { }
};

我拿出了功能描述所以这不会太长,但是如果有什么我没有包含,请告诉我,我会更新帖子!

3 个答案:

答案 0 :(得分:1)

build不知道Warrior是什么。您需要转发声明Noble。将其放在Noble声明之前:

Warrior

此外,您在class Noble; class Warrior { ... 构造函数中拼错了pBoss,将构造函数更改为:

Warrior

最后,在Warrior(string name, double str) : name(name), strength(str), pBoss(nullptr) {} 声明之后,您在Noble内有一个额外的近距离支撑。

答案 1 :(得分:1)

当您定义display时,尚未定义Warrior。 C ++逐行工作。要解决此问题,您可以转发声明类。

Noble

答案 2 :(得分:0)

看起来你的贵族阶层可能会有额外的支撑:

$time = filemtime($temp_path);