c++ - 命名空间内具有函数的循环包含

标签 c++ namespaces header-files circular-dependency friend-function

我开始学习 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/

相关文章:

c++ - 有没有办法不使用命名空间中的项目?

c - 为什么头文件保证了C程序的模块化?

c++ - 我使用 OpenMP 的线程越多,执行时间就越长,这是怎么回事?

c++ - 需要知道如何检查输入的字符串是否已在 C++ 中的线程安全记录器内终止

c++ - 转到优化重构

c++ - 跨命名空间重载函数是否一定很困难?

c# - 从 Canvas 继承

C++ 嵌套模板类语法

c++ - 在仅 header 库的类定义中实现有什么不同?

c++ - 预编译头文件的行为导致错误