我一直在尝试在C ++中使用std::swap
函数:
#include <iostream>
int main(int argc, char * argv[]){
int i(2);
int j(3);
std::cout << i << std::endl << j << std::endl;
using std::swap;
swap(i,j);
std::cout << i << std::endl << j << std::endl;
}
但是我无法弄清楚为什么在交换功能下的编辑器中有此错误消息:
Invalid arguments '
Candidates are:
std::enable_if<74 0 value 14 std::__and_ 3 14 std::__not_ 1 14 std::__is_tuple_like 1 #0 14 std::is_move_constructible 1 #0 14 std::is_move_assignable 1 #074 0 value 14 std::__and_ 3 14 std::__not_ 1 14 std::__is_tuple_like 1 #0 14 std::is_move_constructible 1 #0 14 std::is_move_assignable 1 #0,void>::type swap(#0 &, #0 &)
std::enable_if<74 0 value 14 std::__and_ 2 14 std::__is_swappable 1 #0 14 std::__is_swappable 1 #174 0 value 14 std::__and_ 2 14 std::__is_swappable 1 #0 14 std::__is_swappable 1 #1,void>::type swap(std::pair<#0,#1> &, std::pair<#0,#1> &)
std::enable_if<bool15 7 74 0 value 14 std::__and_ 2 14 std::__is_swappable 1 #0 14 std::__is_swappable 1 #1 0,void>::type swap(std::pair<#0,#1> &, std::pair<#0,#1> &)
void swap(std::__cxx11::basic_string<#0,#1,#2> &, std::__cxx11::basic_string<#0,#1,#2> &)
std::enable_if<74 0 value 14 std::__is_swappable 1 #074 0 value 14 std::__is_swappable 1 #0,void>::type swap(#0 (&)[3 #1 0], #0 (&)[3 #1 0])
'
尤其奇怪的是,它仅出现在编辑器中,但是当我执行时,它似乎可以正常工作。
我尝试过多次重新启动,还尝试了不同类型的对象,但没有任何改变。
我正在Windows上使用带有MinGW工具链的Eclipse。
答案 0 :(得分:1)
std::swap
在标头<utility>
中定义。首先包含标题,这将成功。
错误中显示的重载似乎引用了其他std::swap
实现,可以通过包含<iostream>
来看到它们。例如,在std::swap
中定义了std::__cxx11::basic_string
(std::string
)的<string>
-而您对<iostream>
的实现可能包含string
(或在{至少向前声明了相关部分)作为其实现的一部分,这使得swap
重载可见。