将“ std :: string {aka std :: basic_string <char>}”分配给

时间:2019-12-21 15:58:40

标签: c++ arrays maps associative

int main()
{

std::string my_string= "16657";
std::map<std::string, std::string[2]> m_msg_int;
std::string arrId[2];
arrId[0] = "ABC";
arrId[1] = "XYZ/CDE";
m_msg_int[my_string] = arrId[2];
std::cout<<"MSGID"<<msgId[0]<<endl;

 }

将“ std :: string {aka std :: basic_string}”分配给“ std :: map,std :: basic_string [2]> :: mapped_type {aka std :: basic_string [2]}”的不兼容类型

2 个答案:

答案 0 :(得分:4)

在线

m_msg_int[my_string] = arrId[2];

您正在访问数组arrId,因为它的大小为2,读取arrId[2]会导致未定义的行为。即使您不会越界访问

m_msg_int[my_string]

是对字符串数组和

的引用
arrId[2]

是一个字符串。可能您正在尝试分配

m_msg_int[my_string] = arrId;

但是在C ++中,您不能将基本数组分配给基本数组。您应该为此使用std :: array

#include <array>
#include <map>
#include <string>

int main()
{
    std::string my_string= "16657";
    std::map<std::string, std::array<std::string, 2>> m_msg_int;
    std::array<std::string, 2> arrId;
    arrId[0] = "ABC";
    arrId[1] = "XYZ/CDE";
    m_msg_int[my_string] = arrId;
    //std::cout<<"MSGID"<<msgId[0]<<endl;
}

答案 1 :(得分:-1)

您将std::string分配给std::string的数组。

m_msg_int[my_string] = arrId;

现在,我们向地图分配std::string数组。

注意:阵列索引范围为nn-1。而且你不能这样做:

m_msg_int[my_string] = arrId[2];

因为arrId有2个元素,但索引2却是第三个元素。