Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ sort()-对';互换';_C++_Xcode_Sorting_Compiler Errors_Swap - Fatal编程技术网

C++ sort()-对';互换';

C++ sort()-对';互换';,c++,xcode,sorting,compiler-errors,swap,C++,Xcode,Sorting,Compiler Errors,Swap,我花了大约一个小时试图弄明白,当我尝试构建下面的类(在XCode中)时,为什么会收到20条类型为“语义问题-调用“swap”时没有匹配的函数”的错误消息 测试.h #include <iostream> #include <string> #include <vector> class Test{ std::vector<std::string> list; void run() const; static bool

我花了大约一个小时试图弄明白,当我尝试构建下面的类(在XCode中)时,为什么会收到20条类型为“语义问题-调用“swap”时没有匹配的函数”的错误消息

测试.h

#include <iostream>
#include <string>
#include <vector>


class Test{
    std::vector<std::string> list;

    void run() const;
    static bool algo(const std::string &str1, const std::string &str2);
};

大多数有相同问题的人似乎都将算法设置为类成员而不是静态成员,但这显然不是问题所在。

事实证明,这是一个非常简单的问题,但不太容易发现(错误消息也不能很好地帮助解决问题):


删除
run()
-voilá上的
const
声明。

编译器引用
swap
,因为
std::sort
在内部使用函数swap。但是,作为成员函数,
run
被声明为常量函数

void run() const;
然后类本身的对象被视为常量对象,因此数据成员列表也是常量对象

std::vector<std::string> list;
std::向量列表;

因此,编译器尝试使用常量引用或甚至不是引用的参数调用
swap
,但找不到这样的函数

错误消息至少应该指向正确的方向,但您必须检查错误的全文,而不仅仅是XCode内联显示的内容。
std::vector<std::string> list;