两个依赖 类 与友元函数的前向声明

Forward declaration of two dependend classes with friend function

我有两个 class。一个依赖另一个 class,另一个包含第一个 class 的友元函数。 classes 中还有很多其他内容,但归结为:

class LightBase;

class Color
{
    friend void LightBase::UpdateColor();
};

class LightBase
{
    public:
        void UpdateColor();
    protected:
        std::vector<Color> colors_;
};

但显然我的前向声明不正确。我明白了:

error: invalid use of incomplete type 'class LightBase'

我知道 UpdateColor() 在好友声明时还不知道。但是我该如何解决呢?

稍微改变一下排列就可以了:

class Color;

class LightBase {
    public:
        void UpdateColor();
    protected:
        // Color has been declared
        std::vector<Color> colors_; 
};

class Color {
    // LightBase has been defined
    friend void LightBase::UpdateColor();
};

关于LightBase::UpdateColor的使用,我们需要定义LightBase class才能使用它的函数成员LightBase,因为到那时才知道,正如您自己指出的那样。

与此同时,我们可以有一个 std::vector<Color>,其中 Color 尚未定义,仅在范围内声明。