[std :: string {aka std :: basic_string }'to 的不兼容类型>]

问题描述 投票:2回答:2
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]}'的不兼容类型]] >
c++ arrays maps associative
2个回答
4
投票

In line

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
投票

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

m_msg_int[my_string] = arrId;

现在我们将std::string数组分配给地图。

NOTE:数组索引范围是nn-1。而且你不能这样做:

m_msg_int[my_string] = arrId[2];

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

© www.soinside.com 2019 - 2024. All rights reserved.