gpt4 book ai didi

c++ - for-each 循环生成错误,但是 for(it=begin()... 在遍历包含 unique_ptr 的 std::map 时不会生成错误

转载 作者:搜寻专家 更新时间:2023-10-31 00:12:01 25 4
gpt4 key购买 nike

当我在 std::map 上使用 for-each 样式循环时出现奇怪的错误,但当我使用 iterator-incrementing 时却没有for 循环。这是为什么?

这不会产生任何错误:

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

但是这会产生一个错误:

      for(auto subject: SubjectList){
Hist2D<int> h2d(25,25);
}

如下:

ctest.cpp:406:23: error: use of deleted function ‘constexpr std::pair<_T1, _T2>::pair(const std::pair<_T1, _T2>&) [with _T1 = const std::basic_string<char>; _T2 = std::unique_ptr<ListOfNumericLists<int> >]’
for(auto subject: SubjectList){
^
In file included from /usr/include/c++/4.9/bits/stl_algobase.h:64:0,
from /usr/include/c++/4.9/memory:62,
from ctest.cpp:1:
/usr/include/c++/4.9/bits/stl_pair.h:127:17: note: ‘constexpr std::pair<_T1, _T2>::pair(const std::pair<_T1, _T2>&) [with _T1 = const std::basic_string<char>; _T2 = std::unique_ptr<ListOfNumericLists<int> >]’ is implicitly deleted because the default definition would be ill-formed:
constexpr pair(const pair&) = default;

这里是 std::map

的声明
std::map<std::string, std::unique_ptr<ListOfNumericLists<int>>> SubjectList;

最佳答案

错误是你的映射对不可复制,你需要遍历引用

for(auto& subject: SubjectList)

或者如果你不打算改变元素,你也应该让它们成为const

for(auto const& subject: SubjectList)

这是因为您的 std::map 的每个元素都是一个

std::pair<std::string, std::unique_ptr<ListOfNumericLists<int>>

所以因为有一个 std::unique_ptr 元素是不可复制的

关于c++ - for-each 循环生成错误,但是 for(it=begin()... 在遍历包含 unique_ptr 的 std::map 时不会生成错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31864927/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com