使用STD集查找时,该程序将不会编译
When using std set find, the program will not compile
我正在尝试在std :: set中找到一个字符串,但是当使用std :: set :: find时,它会产生一个我不理解的很长的错误。我可以从程序中访问该集合,因此这不是问题。
当我刚运行发现时,它可以正常工作,但是当我在任何东西中使用它,例如将其设置为变量或试图输出它时,编译器会怪异。我看到错误来自C 7文件夹,但这应该是C 11,所以我不知道。
这是我尝试使用命令的地方:
int interperet() {
cout << ">";
if (!cin.getline(input,sizeof(input))) {
cout << "ErrCode 1: Could not get input" << endl;
}
cout << commands.find("help cmmds.cpp");
return 0;
}
这是集合:
set<string> commands = {
"help cmmds.cpp"
};
这是编译器输出的粘贴:https://pastebin.com/u6dfy8lq
我是正确的,说该错误声称它不能将std::__cxx11::basic_string<char>
转换为std::__cxx11::basic_string<char>
?
谢谢您的帮助!
std::set<T>::find()
返回的类型是Iterator
。
您无法将Iterators
传递给输出流(通常在说(。但是您可以将迭代器推迟以获取对T
的引用,并且如果通过operator<<
流式传输,则它将打印。
auto find = commands.find("X");
std::cout << (*find) << "n;
^ // de-reference the iterator.
现在不要像上面完成的那样编写代码。这里的问题是发现可能失败。如果发现失败,它将返回容器的end()
迭代器。拒绝end()
迭代器是不确定的行为,因此您必须真正检查一下。
auto find = commands.find("X");
if (find != commands.end()) {
std::cout << (*find) << "n;
} else {
std::cout << "Failedn";
}
查找返回类型容器的对象:: iterator
http://www.cplusplus.com/reference/set/set/find/
通常,这些对象不支持打印/流方法。
您可能想知道的是是否找到了,因此您可以流式传输(commands.find("help cmmds.cpp") != commands.end())
。
我是正确的,说该错误声称它不能将std :: __ cxx11 :: basic_string转换为std :: __ __ cxx11 :: basic_string?
否。那是不准确的。
错误声称它不能将std::set<std::__cxx11::basic_string<char>, std::less<std::__cxx11::basic_string<char> >, std::allocator<std::__cxx11::basic_string<char> > >::iterator
转换为operator<<(basic_ostream<_CharT, _Traits>&, ....
的过载设置的任何候选者。
让我们称该类型的set::iterator
表示简洁。这就是set::find
返回的内容以及您尝试插入输出流的内容。
您需要决定通过尝试将迭代器插入输出流的尝试。
如果您的意图是打印集合中是否存在值,则可以使用此方法:
// only since C++20
cout << commands.contains("help cmmds.cpp");
// pre C++20
cout << commands.find("help cmmds.cpp") != commands.end();
如果您打算打印字符串,则可以使用:
const char* str = "help cmmds.cpp";
if (commands.contains(str))
cout << str;
,也可以通过返回的迭代器间接。但是您必须首先检查是否找到它:
auto it = commands.find("help cmmds.cpp");
if (it != commands.end())
std::cout << *it;
- 这是使用回溯的 nqueen 问题,但我使用了动态 2d 数组,我的程序编译良好,但不返回任何输出
- C ++程序编译错误,找不到/访问文件
- C++程序编译没有问题,但无法运行
- Mongdb C++ 驱动程序编译错误 for document{}.
- 添加类型名会导致程序编译失败
- 将 C 程序更改为 C++ 程序 - 编译错误
- 程序编译,但当分解为函数时实际上不会移动电机
- 如何链接 glib-2.0 库进行 c/c++ 程序编译
- 为什么 gcc 和 clang 为我的程序编译为不同的"const"结果?
- 复数程序编译时的计算方法错误
- qt 命令行应用程序编译
- 程序编译和运行,但一段时间后,它停止使用Typedef关键字在CPP上工作
- QML应用程序编译一个 *form.ui.qml文件,但忽略了关联的.qml文件
- 为什么该程序编译但不显示任何输出
- 分割故障程序编译为共享库,但不静态
- 程序编译,但我认为开关被忽略
- 程序编译后崩溃
- 什么是程序编译中的PIC级别
- 尽管使用不存在的成员,但程序编译
- C++程序编译在 Ubuntu 中失败,但在 MacOSX 中工作