gpt4 book ai didi

c++ - “生物”未在此范围内声明

转载 作者:行者123 更新时间:2023-11-27 23:05:30 30 4
gpt4 key购买 nike

如何修复 Hero.h 中的错误?

 GCC C++ compiler flags  : -c -fmessage-length=0 -std=gnu++11 ; 

我将 g++ 更新到 4.8.1

// Creature.h
#pragma once

#ifndef CREATURE_H_
#define CREATURE_H_

#include <string>
#include "Hero.h"
#include "Characteristics.h"
#include <map>

class Creature
{
private:

CreatureCharacteristics Characters;

Creature(const std::string i_name, int i_count = 0);
Creature(const Creature& Donor);

public:
typedef std::map < std::string, Creature* > Prototypes;
static Prototypes Clones_Bank;
~Creature();

const CreatureCharacteristics& Get_characteristics(){
return this->Characters;
}

static Creature*& Clone(std::string i_name, int i_count = 0);
};
#endif /* CREATURE_H_ */


// Hero.h
#pragma once

#ifndef HERO_H_
#define HERO_H_

#include "Creature.h"
#include "Characteristics.h"
#include <string>
#include <vector>

typedef std::vector<Creature*> Army; // ERROR HERE (‘Creature’ was not declared in this
scope)


class Hero {
private:
Army army;
HeroCharacteristics base_characteristics;

public:
Hero(std::string name = '\0', int attack = 0, int defense = 0):
hero_name(name)
{
base_characteristics.attack = attack;
base_characteristics.defence = defense;
};
const Army& Get_army() const
{
return army;
};
const std::string& Get_name() const
{
return hero_name;
};
const HeroCharacteristics& Get_characteristics() const
{
return base_characteristics;
};
void Add_creature(Creature* creature, int creature_count);
};
#endif /* HERO_H_ */

最佳答案

问题是 Hero.hCreature.h 相互包含:你有一个循环依赖。当 Hero.h 包含 Creature.h 并且 Creature.h 尝试再次包含 Hero.h 时,HERO_H_ 已经定义,因此不会插入任何内容(如果您删除包含守卫,您将得到一个无休止的包含循环,这也不好)。

但是,Creature.h 似乎并没有实际使用Hero.h,因此您可以删除此 header 。如果您以后确实需要 header 中的某些内容,您很可能会通过 前向声明 摆脱困境。有关更多信息,请参阅 C++ FAQ 条目 "How can I create two classes that both know about each other?" .

关于c++ - “生物”未在此范围内声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23854541/

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