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 {
...