Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/124.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++ for每个循环都会生成错误,但for(it=begin()…在遍历包含唯一ptr的std::map时不会';t_C++ - Fatal编程技术网

C++ for每个循环都会生成错误,但for(it=begin()…在遍历包含唯一ptr的std::map时不会';t

C++ for每个循环都会生成错误,但for(it=begin()…在遍历包含唯一ptr的std::map时不会';t,c++,C++,当我在std::map上对每个样式的循环使用时,我得到了一个奇怪的错误,但当我对循环使用迭代器递增时,却没有得到这个错误。这是为什么 这不会产生任何错误: for(auto it = SubjectList.begin(); it!= SubjectList.end(); ++it){ Hist2D<int> h2d(25,25); } 错误是您的映射对不可复制,您需要迭代引用 for(auto& subject: SubjectList) 或者,如果您不

当我在
std::map
上对每个
样式的循环使用
时,我得到了一个奇怪的错误,但当我对循环使用
迭代器递增时,却没有得到这个错误。这是为什么

这不会产生任何错误:

  for(auto it = SubjectList.begin(); it!= SubjectList.end(); ++it){
    Hist2D<int> h2d(25,25);
  }

错误是您的映射对不可复制,您需要迭代引用

for(auto& subject: SubjectList)
或者,如果您不打算对元素进行变异,也应该使它们
const

for(auto const& subject: SubjectList)
这是因为
std::map
的每个元素都是

std::pair<std::string, std::unique_ptr<ListOfNumericLists<int>>
std::pair 为映射中的每个键/值对创建名为
subject
的副本。由于您的值类型是无法复制的
std::unique_ptr
,因此也无法复制该对。因此,错误将被忽略

试一试

相反

作为补充说明,迭代器循环当然可以正常工作,因为您甚至无法访问(更不用说尝试复制)映射的内容

for(auto& subject: SubjectList)
for(auto const& subject: SubjectList)
std::pair<std::string, std::unique_ptr<ListOfNumericLists<int>>
for(auto subject: SubjectList)
for(const auto &subject: SubjectList)