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

问题描述 投票:0回答:1

我开始学习C++,最近遇到了一个问题,两个头文件的循环依赖。我已经尝试过正向声明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();
    }
}

我真的很想把类和命名空间保存在不同的文件中,但我没有找到任何办法。 先谢谢你的帮助!

c++ namespaces header-files circular-dependency friend-function
1个回答
0
投票

你需要改变 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)是会让你头疼的。

© www.soinside.com 2019 - 2024. All rights reserved.