Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/133.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++;:包含彼此的标题会导致错误“;“类尚未声明”; 我对C++比较陌生,我整天都在面对这个问题,真的很烦人。 假设我有这两个类在不同的文件中 a、 水电站:_C++_Circular Dependency - Fatal编程技术网

C++;:包含彼此的标题会导致错误“;“类尚未声明”; 我对C++比较陌生,我整天都在面对这个问题,真的很烦人。 假设我有这两个类在不同的文件中 a、 水电站:

C++;:包含彼此的标题会导致错误“;“类尚未声明”; 我对C++比较陌生,我整天都在面对这个问题,真的很烦人。 假设我有这两个类在不同的文件中 a、 水电站:,c++,circular-dependency,C++,Circular Dependency,我查阅了一些文档,意识到这与循环依赖性有关,但我仍然无法解决这个问题 我检查的一些票证的#define and#ifndef有问题,但我的情况并非如此。要打破循环依赖关系,您需要向每个头文件添加所依赖类的前向声明,如下所示: #ifndef A_H #define A_H #include <iostream> class CRoom; class CPlay { ... \ifndef A\u H #定义一个 #包括 克罗伊班; 类CPlay{ ... 以及: #ifnde

我查阅了一些文档,意识到这与循环依赖性有关,但我仍然无法解决这个问题


我检查的一些票证的#define and#ifndef有问题,但我的情况并非如此。

要打破循环依赖关系,您需要向每个头文件添加所依赖类的前向声明,如下所示:

#ifndef A_H
#define A_H
#include <iostream>

class CRoom;

class CPlay {
...
\ifndef A\u H
#定义一个
#包括
克罗伊班;
类CPlay{
...
以及:

#ifndef D#H
#定义D_H
#包括
类CPlay;
克罗姆班{
...

请注意,这允许您从头文件本身中删除
#include

这就是我所检查的。现在为什么头文件需要相互包含?您需要在
d.hpp
中向前声明
CPlay
,而在
d.hpp
中不包含
a.hpp
(int m_money,CRoom&a){…}删除
#include“d.hpp”
,将
CRoom&a
更改为
类CRoom&a
,并将函数体移动到一个.cpp文件中,该文件
中包含“d.hpp”
。这正是副本告诉您要做的。
#ifndef D_H
#define D_H
#include <iostream>
#include "a.hpp"
class CRoom
{
  public:
   CRoom() = default;
   CRoom(std::string m_Name , short m_Seats)
   {
       Name = m_Name;
       Seats = m_Seats;
   }
   void gameOff(int m_money , CPlay &a)
   {
       std::cout << "test2";
   }
  ~CRoom() {}
  private:
   short Seats;
   std::string Name;
};

#endif
#include <iostream>
#include "a.hpp"
#include "d.hpp"

int main()
{
   CRoom gameplay("GTA",5);

   return 0;
}
d.hpp:13:31: error: 'CPlay' has not been declared
    void gameOff(int m_money , CPlay &a)
#ifndef A_H
#define A_H
#include <iostream>

class CRoom;

class CPlay {
...
#ifndef D_H
#define D_H
#include <iostream>

class CPlay;

class CRoom {
...