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 未被识别为有效类型。我怀疑在这种情况下前向声明是不够的。有什么解决办法吗?