标题可能不太清楚,比这复杂一些。我在网上搜索了类似我的问题的信息,但是没有找到任何可以帮助我的信息。
这与无限循环包含无关,我已经放置了预处理程序指令来避免这种情况。

我有两个类Monster和Character,分别在它们自己的头文件Monster.hpp和character.hpp中声明,并分别在自己的源文件monster.cpp和character.cpp中实现。
现在的问题是两个类都需要彼此配合才能工作。

monster.hpp:

#ifndef INCLUDE_MONSTER_HPP
#define INCLUDE_MONSTER_HPP

#include "character.hpp"

class Monster
{
  private: //Atributes

  public:  //Methods
    void attackM(Monster& id);
    void attackC(Character& id);
};

#endif //MONSTER_HPP_INCLUDED

character.hpp:
#ifndef INCLUDE_CHARACTER_HPP
#define INCLUDE_CHARACTER_HPP

#include "monster.hpp"

class Character
{
    private:  //Attributes

    public:   //Methods
        void attackM(Monster& id);
        void attackC(Character& id);
};

#endif //CHARACTER_HPP_INCLUDED

和main.cpp:
#include <iostream>
#include "character.hpp"
#include "monster.hpp"

using namespace std;

int main(int argc, char **argv)
{
    //Whatever
    return 0;
}

我从编译器得到此错误:
In file included from character.hpp:7:0,
                 from main.cpp:3:
monster.hpp:24:16: error: 'Character' has not been declared
   void attackC(Character& id);

(行号和列号可能是错误的)
据我了解,当将monster.hpp包含在character.hpp中时,编译器会看到该类Monster使用了Character类,,而当monster.hpp被包含在character.hpp中时,该类尚未声明。
而且我不知道该如何解决。

有任何想法吗 ?

最佳答案

这种工作方式是char和Monster的头文件不相互包含。相反,您可以前向声明类,并在CPP文件中包含 header 。

因此,基本上将.h中的#include "monster.hpp"替换为.cpp中的class Monster;#include "monster.hpp",其他类也是如此。

有关更多详细信息,请参见此问题:

What are forward declarations in C++?

关于c++ - C++:包含在包含内,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21762678/

10-11 17:05