gpt4 book ai didi

c++ - 类的友元函数产生错误 : "no ' __ _' member function declared"

转载 作者:行者123 更新时间:2023-11-30 04:15:09 24 4
gpt4 key购买 nike

我有一个类,我正在尝试创建一个友元函数来操作该类的数据。

这是我正在尝试做的一个例子:

// test.hpp
class test
{
public:
friend void friendly_function();
private:
int data;
};

void test::friendly_function()
{
data = 0;
}

但是,编译器报错:test.hpp:23:34: error: no 'void test::friendly_function()' member function declared in class 'test'

我知道我可以用这种方式声明运算符,就像这样:

class test
{
public:
friend const bool operator<(const test& _lhs, const test& _rhs);
private:
int data;
};

const bool test::operator<(const test& _lhs, const test& _rhs)
{
return (_lhs.data < _rhs.data);
}

那么为什么我不能使用 friendly_function 来做到这一点?友元函数是否只允许作为运算符?

最佳答案

在我发布这个问题之前,我实际上设法弄清楚了问题,所以给出答案似乎是明智的,因为其他人将来可能会发现它有用。我还将答案设置为“社区 wiki”,以便其他人可以根据需要对其进行改进。

问题在于友元函数不是类的成员,因此必须在没有test:: 说明符的情况下进行编码,因为它们不是类test 的成员>.

friend void friendly_function(); 声明必须在测试类中,因为这告诉编译器 friendly_function() 可以访问私有(private)成员测试

因为 friendly_function() 不是 class test 的成员,所以将所有这些代码放在一个命名空间中是个好主意,它将所有一个逻辑 block 中的函数和类。

namespace test_ns {
class test
{
public:
friend void friendly_function(test &_t);
friend bool operator<(const test& _lhs, const test& _rhs);
private:
int data;
}; // class test

void friendly_function(test &_t)
{
_t.data = 0;
}

bool operator<(const test& _lhs, const test& _rhs)
{
return _lhs.data < _rhs.data;
}

} // namespace test_ns

这应该可以解决问题。友元函数有点微妙,因为它们可能看起来像成员函数,但实际上不是!

关于c++ - 类的友元函数产生错误 : "no ' __ _' member function declared",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18520626/

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