两个依赖 类 与友元函数的前向声明
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
尚未定义,仅在范围内声明。
我有两个 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
尚未定义,仅在范围内声明。