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
声明中使用限定名称时,必须引用已经声明的内容。 - Angew is no longer proud of SOC
作为类的前缀,这从来都不是合适的做法,而且只是基于对 MFC 命名约定的误解。 - Konrad Rudolph