循环包含命名空间内的函数

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())会让您头疼。