sort() - 没有匹配函数来调用 'swap'
sort() - No matching function for call to 'swap'
刚花了大约一个小时试图弄清楚为什么当我尝试构建以下 class(在 XCode 中)时会收到 20 条 "Semantic issue - no matching function for call to 'swap'"
类型的错误消息。
test.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);
};
test.cpp
#include "test.h"
void Test::run() const {
std::sort( list.begin(), list.end(), algo );
}
bool Test::algo(const std::string &str1, const std::string &str2){
// Compare and return bool
}
大多数遇到同样问题的人似乎都将他们的算法设为 class 成员而不是静态成员,但这显然不是这里的问题。
事实证明这是一个非常简单的问题,但不是很明显(并且错误消息也没有很好地帮助解决):
删除 run()
上的 const
声明 - 瞧。
编译器引用 swap
因为 std::sort
在内部使用函数交换。但是,由于成员函数 run
被声明为常量函数
void run() const;
那么class的对象本身就是一个常量对象,因此数据成员列表也是一个常量对象
std::vector<std::string> list;
所以编译器试图调用swap
参数是常量引用甚至不是引用的函数,也找不到这样的函数。
刚花了大约一个小时试图弄清楚为什么当我尝试构建以下 class(在 XCode 中)时会收到 20 条 "Semantic issue - no matching function for call to 'swap'"
类型的错误消息。
test.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);
};
test.cpp
#include "test.h"
void Test::run() const {
std::sort( list.begin(), list.end(), algo );
}
bool Test::algo(const std::string &str1, const std::string &str2){
// Compare and return bool
}
大多数遇到同样问题的人似乎都将他们的算法设为 class 成员而不是静态成员,但这显然不是这里的问题。
事实证明这是一个非常简单的问题,但不是很明显(并且错误消息也没有很好地帮助解决):
删除 run()
上的 const
声明 - 瞧。
编译器引用 swap
因为 std::sort
在内部使用函数交换。但是,由于成员函数 run
被声明为常量函数
void run() const;
那么class的对象本身就是一个常量对象,因此数据成员列表也是一个常量对象
std::vector<std::string> list;
所以编译器试图调用swap
参数是常量引用甚至不是引用的函数,也找不到这样的函数。