C++,带有 vector<unique_ptr> 的 find_if 无法正常工作

Posted

技术标签:

【中文标题】C++,带有 vector<unique_ptr> 的 find_if 无法正常工作【英文标题】:C++, find_if with vector<unique_ptr> is not working properly 【发布时间】:2017-03-30 16:07:41 【问题描述】:

我知道以前有人问过类似的问题,但我没有找到我的问题的答案,所以我只想在这里发布。

iteratorHelperaccountNr 作为参数,搜索 unique_ptrs 向量并返回一个布尔值。

问题在于第二种方法。

getAccInfo(size_t pAccNr) 中的 if 语句给我带来了问题。 我的 IDE 抱怨“iteratorHelper”这样说

对象具有与成员函数“Client::iteratorHelper”不兼容的类型限定符。对象类型为 const Client

我不完全确定我在这里缺少什么,所以如果有人能指出我正确的方向吗?

auto Client::iteratorHelper(size_t accountNr ) 
  return find_if(
    accounts.begin(), accounts.end(),
    [&accountNr ](const unique_ptr<Account>& account) 
      return account->getAccountNr() == accountNr;
    
  );

unique_ptr<Account> const & Client::getAccInfo(size_t pAccNr) const 
  if (iteratorHelper(pAccNr) != accounts.end()) 
    auto const& index = distance(accounts.begin(), iteratorHelper(pAccNr));
    return accounts[index];
  
  return nullptr;    

【问题讨论】:

怎样才能找到独一无二的东西? 刚接触 C++,不知怎的,这个问题对我来说没有意义 与 C++ 无关。想一想:你正在寻找只存在一次的东西。你怎么知道你找到了它?你无法将它与任何东西进行比较,因为它不同于其他任何东西。 我清理了代码格式,发现您缺少。我不确定这是来自您的原始代码,还是转录错误。此外,在提出此类问题时,实际上包括实际的完整错误消息并指出它所指的行是您至少可以做的。您可能认为您的缩写是“所有我们需要知道的”,但如果您知道出了什么问题您就不会在这里问了。 minimal reproducible example 表示您在简化代码后生成相同的错误,并发布生成错误的实际代码实际错误 【参考方案1】:

iteratorHelper 不是const。您从const 函数getAccInfo 调用它。这是非法的。

【讨论】:

以上是关于C++,带有 vector<unique_ptr> 的 find_if 无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章

带有继承的c++向量

从成员函数打印 vector<int> 元素时出现 C++ 段错误

C++ 双重释放或损坏(出)

带有矢量对象 C++ 的快速排序函数

带有结构的 C++ 向量不起作用?

带有向量和字符串的 C++ 分段错误