循环包含命名空间内的函数
Circular inclusion with function inside namespace
我开始学习C++,最近遇到了两个头文件循环依赖的问题。
我已经尝试向前声明 Class 和命名空间,还在单独的项目中尝试过它,但没有找到任何解决方案。无论我做什么,函数都无法访问 class 私有成员。
这里我把问题简单化了一点
A.h
#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();
}
}
我真的很想将 class 和名称空间保存在单独的文件中,但我看不出有什么办法。
提前感谢您的帮助!
您需要更改 A.h
以在命名空间 Byte
:
中包含 getDataChunk()
的前向声明
#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);
};
另请注意,在头文件中包含函数定义(即 B.h
中的 getDataChunk()
)会让您头疼。
我开始学习C++,最近遇到了两个头文件循环依赖的问题。
我已经尝试向前声明 Class 和命名空间,还在单独的项目中尝试过它,但没有找到任何解决方案。无论我做什么,函数都无法访问 class 私有成员。
这里我把问题简单化了一点
A.h
#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();
}
}
我真的很想将 class 和名称空间保存在单独的文件中,但我看不出有什么办法。
提前感谢您的帮助!
您需要更改 A.h
以在命名空间 Byte
:
getDataChunk()
的前向声明
#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);
};
另请注意,在头文件中包含函数定义(即 B.h
中的 getDataChunk()
)会让您头疼。