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不被认为是有效类型.
我怀疑在这种情况下前瞻声明是不够的.有什么工作吗?
最佳答案 奇怪的是,你需要这样做:
friend CTribool (::operator !) ( const CTribool& rkTribool );
你需要指定你的函数在全局范围内,但没有括号,你的::将与CTribool绑定,就好像你这样做:
friend (CTribool::operator !) ( const CTribool& rkTribool );
在这种情况下,它会认为您指定的函数没有返回类型.