我开始学习 C++,最近遇到了两个头文件循环依赖的问题。
我已经尝试过声明类和命名空间,也在一个单独的项目中尝试过,但没有找到任何解决方案。无论我做什么,该函数都无法访问类私有(private)成员。
在这里,我稍微简化了问题。
啊
#pragma once
#include "B.h"
class Player {
private:
int m_number;
public:
friend void Byte::getDataChunk(Player& p);
};
B.h
#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
)会让您头疼。
关于c++ - 命名空间内具有函数的循环包含,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61725632/