遍历映射时出错<std::string, std::string>
Error when iterating through a map<std::string, std::string>
我尝试了几种遍历"entries"映射的方法,但所有方法都产生相同的冗长错误消息。
dylan@Aspire-one:~$ g++ -std=c++11 dictionary.cpp
In file included from /usr/include/c++/4.8/map:60:0,
from dictionary.h:6,
from dictionary.cpp:1:
/usr/include/c++/4.8/bits/stl_tree.h: In instantiation of ‘void
std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare,
_Alloc>::_M_insert_unique(_II, _II) [with _InputIterator =
std::basic_string<char>; _Key = std::basic_string<char>; _Val =
std::pair<const std::basic_string<char>, std::basic_string<char> >;
_KeyOfValue = std::_Select1st<std::pair<const std::basic_string<char>,
std::basic_string<char> > >; _Compare = std::less<std::basic_string<char>
>; _Alloc = std::allocator<std::pair<const std::basic_string<char>,
std::basic_string<char> > >]’:
/usr/include/c++/4.8/bits/stl_map.h:226:11: required from
‘std::map<_Key, _Tp, _Compare, _Alloc>::map(_InputIterator,
_InputIterator) [with _InputIterator = std::basic_string<char>; _Key =
std::basic_string<char>; _Tp = std::basic_string<char>; _Compare =
std::less<std::basic_string<char> >; _Alloc =
std::allocator<std::pair<const std::basic_string<char>,
std::basic_string<char> > >]’
dictionary.h:11:66: required from here
/usr/include/c++/4.8/bits/stl_tree.h:1721:28: error: no match for
‘operator++’ (operand type is ‘std::basic_string<char>’)
for (; __first != __last; ++__first)
^
/usr/include/c++/4.8/bits/stl_tree.h:1722:29: error: no match for
‘operator*’ (operand type is ‘std::basic_string<char>’)
_M_insert_unique_(end(), *__first);
^
dylan@Aspire-one:~$
这是我最近的代码。
dictionary.cpp
#include "dictionary.h"
//I have included <string> <map> <iterator> "from dictionary.h"
bool dictionary::search_term(const std::string& term){
std::map<std::string, std::string>::iterator it;
for (it = entries.begin(); it != entries.end(); ++it){
if(it->first != term);
else return true;
}return false;
};
所以错误在"dictionary.h"?
dictionary.h
#ifndef DICTIONARY_H
#define DICTIONARY_H
#include <iterator>
#include <string>
#include <map>
class dictionary{
public:
dictionary(const std::string& title, const std::string& definition = "")
: entries(std::map<std::string, std::string>(title, definition)){;};
bool write_entry(const std::string& term, const std::string& definition = "");
bool define_term(const std::string& term, const std::string& definition);
bool erase_entry(const std::string& term);
bool search_term(const std::string& term);
private:
std::map<std::string, std::string> entries;
};
#endif//DICTIONARY_H
在构造函数中,为map使用大括号初始化:
dictionary(const std::string& title, const std::string& definition = "")
: entries{ {title, definition} } {;};
(EDIT:忘记一层花括号)
或在构造函数体
中设置元素 dictionary(const std::string& title, const std::string& definition = "")
{
entries[title] = definition;
}
问题在于class dictionary
的构造函数的定义。std::map
没有接受单个键值对的构造函数,因此使用单个键值对进行初始化的最简单方法是使用通用初始化器语法。您需要两对大括号,一对用于键值对的列表,另一对用于要定义的单对:
dictionary(const std::string& title, const std::string& definition = "")
: entries(std::map<std::string, std::string>(title, definition)){;};
dictionary(const std::string& title, const std::string& definition = "")
: entries{ {title, definition} } {}
相关文章:
- cppcheck在const std::string[]上引发警告
- 将std::string传递给WriteConsole API
- 为std::string的某个索引赋值
- std中有类似find_last_of的函数,而string中没有
- 使用 std::string () const 函数启动线程或未来
- 当我们进行一些操作时,应该使用什么'std::string'或'std::stringstream'?
- 如何更改大小(std::string)
- std::string 的对象真的可以移动吗?
- SegFault 同时使用 std::string::operator+= 和函数作为参数
- 无法从 std::string 中提取C++ Unicode 符号
- std::string 构造函数如何处理固定大小的 char[]?
- 确切地说,如何解释 std::getline(stream, string) 函数在C++中填充的字符串
- C++:考虑C++ std::string 中双引号 (") 的字面含义,而不使用反斜杠 (\)
- 'int main(int, int, std::__cxx11::string, std::__cxx11::string)'只需要零或两个参数 [-Wmain]
- C++ 在列表和列表之间选择返回类型<<string>std::p air<string,string>>
- std::string, std::wstring and UTF8
- uan inplace replacement of std::string/std::wstring?
- #define Glib::string std:wstring
- 从 std::string & std::wstring 中获取 char 整数值
- BSTR转换为std::string(std::wstring),反之亦然