错误:用户定义的无效转换从char到const key_type&

时间:2017-10-02 22:23:48

标签: c++ string c++11 dictionary compiler-errors

我正在尝试使用int为拉丁字母表中的每个字母指定std::map类型值。当我想创建新的int并给它一个等于映射到word的int的值时,我得到一个错误:

  

F:\ Programming \ korki \ BRUDNOPIS \ main.cpp | 14 | error:来自' char'的用户定义转换无效to' const key_type& {aka const std :: basic_string&}' [-fpermissive] |

示例:

#include <iostream>
#include <string>
#include <cstdlib>
#include <map>

using namespace std;

int main()
{
    std::map <std::string,int> map;
    map["A"] = 1;
    int x;
    std:: string word = "AAAAAA";
    x = map[word[3]];

    cout << x;

    return 0;
}

我做错了什么?

3 个答案:

答案 0 :(得分:1)

  

我正在尝试使用std :: map为拉丁字母表中的每个字母分配int类型值。

因此,您必须使用char(而不是std::string)作为地图的关键字;

之类的东西
#include <iostream>
#include <string>
#include <map>

int main()
{
    std::map<char, int>  map;
    map['A'] = 1;
    int x;
    std:: string word = "AAAAAA";
    x = map[word[3]];

    std::cout << x << std::endl;

    return 0;
}

正如其他人所观察到的那样,现在您尝试使用char作为密钥为std::map的{​​{1}}的密钥。并且没有从std::stringchar的自动转换。

Little Off主题建议:避免为变量指定类型名称,例如您命名为std::string的{​​{1}}。这是合法但容易混淆。

答案 1 :(得分:0)

word[3]的类型为char,您的地图的密钥类型为std::string。没有从char转换为std::string

只需更改字符串的子字符串(使用string::substr):

x = map[word[3]];

到此:

x = map[word.substr(3, 1)];

或者更好的是,使用char作为您的密钥,因为您需要字母,如下所示:

std::map <char, int> map;
map['A'] = 1;
// rest of the code as in your question 

答案 2 :(得分:0)

word[3]是字符串第四个位置的字符。但是你不能将它用作地图的键,因为地图使用字符串作为键。如果您将地图更改为具有char键,那么它将起作用,或者您可以:

  • 从单词[3]
  • 创建一个字符串
  • 使用substr(3,1)获取密钥