Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/135.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 带映射的赋值算子 map sym\u addr; 地图符号; 无效集映射(映射和符号tbl) { sym_addr=sym_tbl; }_C++ - Fatal编程技术网

C++ 带映射的赋值算子 map sym\u addr; 地图符号; 无效集映射(映射和符号tbl) { sym_addr=sym_tbl; }

C++ 带映射的赋值算子 map sym\u addr; 地图符号; 无效集映射(映射和符号tbl) { sym_addr=sym_tbl; },c++,C++,上述作业有什么问题吗 更好的方法是将键更改为std::string:std::map 如果要复制,请通过常量引用传递该对象: map<char *, int> sym_addr; map<char *, int> sym_tbl; void set_map(map<char *, int> & sym_tbl) { sym_addr = sym_tbl; } typedef std::mapmyMapType; myMapType sym_addr

上述作业有什么问题吗

更好的方法是将键更改为
std::string
std::map

如果要复制,请通过常量引用传递该对象:

map<char *, int> sym_addr;
map<char *, int> sym_tbl;
void set_map(map<char *, int> & sym_tbl)
{
 sym_addr = sym_tbl;
}
typedef std::mapmyMapType;
myMapType sym_addr;
myMapType sym_tbl;
无效集映射(常量myMapType和符号tbl)
{
sym_addr=sym_tbl;
}

除此之外,没有问题。map::operator=用于将一个映射的内容复制到另一个映射。

应通过
const
引用传递参数,否则将阻止复制声明为
const
的映射


另外,请确保您完全理解使用
char*
作为键时会发生什么情况-键是字符串的地址,而不是其内容。如果要按字符串值对映射进行索引,请使用
std::string
作为键。

问题:
sym\u addr
的键可能泄漏。但也许这不是你要问的。请更具体地定义“任何问题”。我想将一个地图的内容复制到另一个地图中。如果这是错误的,那么什么是正确的方法呢?据我所知,如果你把那些字符指针存储在其他地方,你可以在这些映射中找到任何东西(因为你只能查找字符串的地址)。因此,映射不是键的所有者,分配应该是正确的。您能保证char*指向的任何内容在映射的生命周期内都是有效的吗?如果不是,您最好将映射更改为std::mapI,我可能建议
typedef std::map symtable
将代码简化一点。
typedef std::map< std::string, int> myMapType;
myMapType sym_addr;
myMapType sym_tbl;
void set_map(const myMapType & sym_tbl)
{
 sym_addr = sym_tbl;
}