【问题标题】:Forward declaration of two dependend classes with friend function使用友元函数前向声明两个从属子句
【发布时间】:2021-10-05 19:45:06
【问题描述】:

我有两节课。一个依赖于另一个类,另一个包含一个与第一个类友好的函数。这门课还有很多其他的东西,但归根结底就是:

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() 在朋友声明时是未知的。但是我该如何解决呢?

【问题讨论】:

  • 你可以使用另一个命令,LightBase 只需要声明Color,而Color 需要定义LightBase(要知道它有成员UpdateColor)。跨度>

标签: c++ class dependencies declaration friend


【解决方案1】:

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

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类来使用它的函数成员LightBase,因为直到那时才知道,正如你自己指出的那样。

同时,我们可以有一个 std::vector&lt;Color&gt;Color 尚未定义,只在范围内声明。

【讨论】:

  • 当然谢谢!如果 LightBase 与 Color 的函数成为朋友,我会怎么做?
  • @glades 您必须将整个Color 类声明为朋友。检查这个answer for elaboration
猜你喜欢
  • 2013-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多