【发布时间】:2013-06-19 13:05:45
【问题描述】:
namespace GameForge
{
namespace Core
{
class CTribool;
}
}
GameForge::Core::CTribool operator ! ( const GameForge::Core::CTribool& rkTribool );
namespace GameForge
{
namespace Core
{
class CTribool
{
friend CTribool operator ! ( const CTribool& rkTribool );
private:
EState m_eState;
};
}
}
GameForge::Core::CTribool operator ! ( const GameForge::Core::CTribool& rkTribool )
{
switch( rkTribool.m_eState )
{
// Some stuff...
无法编译,因为 m_eState 在最后一个定义中不可访问。原因是友元声明出现在 Ctribool 命名空间中,因此声明了不同的函数。所以我尝试如下使用范围解析运算符。
friend CTribool ::operator ! ( const CTribool& rkTribool );
和
friend CTribool ::( operator ! ) ( const CTribool& rkTribool );
但这也不起作用,因为不知何故 Ctribool 未被识别为有效类型。 我怀疑在这种情况下前向声明是不够的。有什么解决办法吗?
【问题讨论】:
-
不是
CTribool不被识别为有效类型。当您在friend声明中使用限定名称时,您必须引用已声明的内容。 -
有什么方法可以实现我想要做的吗?我的意思是存在某种循环依赖(CTribool 运营商 -> CTribool -> 与运营商的友谊)。
-
不要使用
C作为类的前缀,它从来都不合适,纯粹是基于对 MFC 命名约定的误解。
标签: c++ operator-keyword friend scope-resolution