我开始学习C++,最近遇到了一个问题,两个头文件的循环依赖。我已经尝试过正向声明Class和命名空间,也在另一个项目中玩过,但没有找到任何解决办法。无论我做什么,函数都不能访问类的私有成员。
这里我把问题简化了一下。
#pragma once
#include "B.h"
class Player {
private:
int m_number;
public:
friend void Byte::getDataChunk(Player& p);
};
#pragma once
#include <iostream>
#include "A.h"
class Player;
namespace Byte {
void doOtherStuff() {
//other Stuff
}
void getDataChunk(Player& p) {
std::cout << p.m_number;
doOtherStuff();
}
}
我真的很想把类和命名空间保存在不同的文件中,但我没有找到任何办法。 先谢谢你的帮助!
你需要改变 A.h
纳入远期声明 getDataChunk()
在命名空间 Byte
:
#pragma once
#include "B.h"
class Player;
namespace Byte {
void getDataChunk(Player& p);
}
class Player {
private:
int m_number;
public:
friend void Byte::getDataChunk(Player& p);
};
还请注意,在头文件中包含函数定义(即在 getDataChunk()
中的 B.h
)是会让你头疼的。