排序函数中 'operator=' 不匹配
No match for 'operator=' in sort function
我正在尝试让程序写出字符串的所有排列。这是我的代码:
#include <stdio.h>
#include <string>
#include <iostream>
#include <algorithm>
using namespace std;
int main () {
string input;
int length;
cin >> input;
input = sort(begin(input), end(input));
length = input.length();
do {
cout << input;
cout << "\n";
} while (next_permutation(input,input+length));
}
但是,我收到以下错误:
[path removed]\PermutIO.cpp|12|error: no match for 'operator=' in 'input = std::sort<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> > >(std::begin<std::basic_string<char> >((* & input)), std::end<std::basic_string<char> >((* & input)))'|
我将 Code::Blocks 与 g++ 一起使用,并将其设置为使用 C++11 标准。好像是什么问题?
此行格式错误,因为 std::sort
returns void
.
input = sort(begin(input), end(input));
您不能将 void
分配给 std::string
。
从该行中删除 input =
。不需要。
sort
方法本身 returns 一个 void
,所以您要做的是将 string
分配给 void
。
只需写 sort(begin(input), end(input))
即可。
更新:
好吧,让我们分析一下你的编译器给出的错误信息:
error: no match for 'operator=' in 'input =
std::sort<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> > >
(std::begin<std::basic_string<char> >((* & input)),
std::end<std::basic_string<char> >((* & input)))'
最后3行可能看起来很难理解,但这里最重要的是第一行:
no match for 'operator=' in 'input = ...
这意味着编译器无法找到允许您将 input
分配给右侧某项的规则。所以,现在,当我们已经知道问题出在赋值时,调试过程就简单多了——我们必须找到 sort
方法 returns 执行的值类型,我们可以只需使用 google.
即可
我正在尝试让程序写出字符串的所有排列。这是我的代码:
#include <stdio.h>
#include <string>
#include <iostream>
#include <algorithm>
using namespace std;
int main () {
string input;
int length;
cin >> input;
input = sort(begin(input), end(input));
length = input.length();
do {
cout << input;
cout << "\n";
} while (next_permutation(input,input+length));
}
但是,我收到以下错误:
[path removed]\PermutIO.cpp|12|error: no match for 'operator=' in 'input = std::sort<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> > >(std::begin<std::basic_string<char> >((* & input)), std::end<std::basic_string<char> >((* & input)))'|
我将 Code::Blocks 与 g++ 一起使用,并将其设置为使用 C++11 标准。好像是什么问题?
此行格式错误,因为 std::sort
returns void
.
input = sort(begin(input), end(input));
您不能将 void
分配给 std::string
。
从该行中删除 input =
。不需要。
sort
方法本身 returns 一个 void
,所以您要做的是将 string
分配给 void
。
只需写 sort(begin(input), end(input))
即可。
更新:
好吧,让我们分析一下你的编译器给出的错误信息:
error: no match for 'operator=' in 'input =
std::sort<__gnu_cxx::__normal_iterator<char*, std::basic_string<char> > >
(std::begin<std::basic_string<char> >((* & input)),
std::end<std::basic_string<char> >((* & input)))'
最后3行可能看起来很难理解,但这里最重要的是第一行:
no match for 'operator=' in 'input = ...
这意味着编译器无法找到允许您将 input
分配给右侧某项的规则。所以,现在,当我们已经知道问题出在赋值时,调试过程就简单多了——我们必须找到 sort
方法 returns 执行的值类型,我们可以只需使用 google.