gpt4 book ai didi

被类函数隐藏的 C++ 友元函数?

转载 作者:可可西里 更新时间:2023-11-01 15:38:14 26 4
gpt4 key购买 nike

最小的例子:

class A
{
friend void swap(A& first, A& second) {}
void swap(A& other) {}
void call_swap(A& other)
{
swap(*this, other);
}
};

int main() { return 0; }

g++ 4.7 说:

friend.cpp: In member function ‘void A::call_swap(A&)’:
friend.cpp:7:20: error: no matching function for call to ‘A::swap(A&, A&)’
friend.cpp:7:20: note: candidate is:
friend.cpp:4:7: note: void A::swap(A&)
friend.cpp:4:7: note: candidate expects 1 argument, 2 provided

第 4 行注释:

// void swap(A& other) {}

...而且效果很好。如果我想保留我的交换函数的两个变体,为什么以及如何解决这个问题?

最佳答案

我相信这是因为编译器试图在类中找到函数。这应该是一个使其工作的简约更改(它在 Visual Studio 2012 中工作):

class A; // this and the next line are not needed in VS2012, but
void swap(A& first, A& second); // will make the code compile in g++ and clang++

class A
{
friend void swap(A& first, A& second) {}
void swap(A& other) {}
void call_swap(A& other)
{
::swap(*this, other); // note the scope operator
}
};

int main() { return 0; }

关于被类函数隐藏的 C++ 友元函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18449855/

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