gpt4 book ai didi

c++ - 好友、运算符关键字和范围解析

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:11:15 33 4
gpt4 key购买 nike

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 绑定(bind),就像您这样做一样:

        friend (CTribool::operator !) ( const CTribool& rkTribool );

在这种情况下,它会认为您指定的是一个没有返回类型的函数。

关于c++ - 好友、运算符关键字和范围解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17251517/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com