c++ - 调用 void 函数时出错操作员
问题描述
我正在尝试将一个字符串和一个空集传递给我的函数。然后我想在我的 main 中调用该函数并打印集合中的所有元素。
这是我的功能代码:
#include<iostream>
using std::cout; using std::endl;
#include<algorithm>
using std::set_union; using std::copy;
#include<iterator>
using std::inserter; using std::ostream_iterator;
#include<string>
using std::string;
#include<set>
using std::set;
void removing(const string &word, set<string> &result) {
string del_word = word;
char erased_l;
for(int i = 0; i < del_word.length(); i++) {
erased_l = word[i];
del_word.erase(0, 1);
del_word = erased_l + del_word;
}
}
下面是我调用该函数的主要代码:
int main (){
set<string> jump = {};
set<string> del = removing("axiom", jump);
for (string ele:del) {
cout << ele << endl;
}
}
我收到以下错误:
No viable conversion from 'void' to 'set<std::__1::string>' (aka 'set<basic_string<char, char_traits<char>, allocator<char> > >')
错误在第 16 行:
set<string> del = removing("axiom", jump);
我的代码试图完成: 如果我传入 axiom,那么我希望我的字符串设置为 {xiom, aiom, axom, axim, axio}。所以删除第一个字母,保留单词的其余部分。然后删除第二个字母,保留单词的其余部分,等等......
解决方案
主要问题包括:
函数的返回值
void
不能分配给 aset
,因此您的编译器错误。您的设计是将空结果的引用传递给set
函数removing
并用结果数据填充它,因此您可以在此处删除分配。result
您的函数内部没有添加任何内容removing
,因此它在函数调用后开始为空并结束为空。
这是一个工作版本:
void removing(const string &word, set<string> &result) {
for (int i = 0; i < word.length(); i++) {
result.insert(word.substr(0, i) + word.substr(i + 1, word.length()));
}
}
int main () {
set<string> jump = {};
removing("axiom", jump);
for (string ele : jump) {
cout << ele << endl;
}
}
输出:
aiom
axim
axio
axom
xiom
话虽如此,我不清楚为什么result
应该是函数的参数。如果您只打算使用它来存储这个特定的结果,那么从调用者的角度来看,这个设计似乎更清晰:
set<string> removing(const string &word) {
set<string> result;
for (int i = 0; i < word.length(); i++) {
result.insert(word.substr(0, i) + word.substr(i + 1, word.length()));
}
return result;
}
int main () {
set<string> jump = removing("axiom");
for (string ele : jump) {
cout << ele << endl;
}
}
推荐阅读
- javascript - Redux 触发的函数未注册组件当前状态
- php - 有没有办法在 GitHub 存储库中获取某个版本的描述?
- c++ - 将基类中的受保护枚举类用作派生类中的公共枚举类的问题 [MSVC 2019]
- xcode - 单击“停止构建”时,Xcode 正在与正在运行的进程分离
- c# - 我收到一个错误 - 当前上下文中不存在名称“Vector2”
- java - 如何在条件查询中的非实体字段上创建 orderby?
- java - 根据 Java 中的父类中的元素(也按顺序)验证 2 个列表是否相等
- r - Shiny SidebarPanel selectInput 仅在选中复选框后
- graphdb - Java 兼容性 -- GraphDB 免费版 -- 独立变体
- javascript - 如何添加子值,检查我的代码以了解