【问题标题】:Accessing second element in map which is object pointer访问映射中的第二个元素,即对象指针
【发布时间】:2017-05-13 20:00:31
【问题描述】:

我正在尝试访问我的 mainRegister 映射中的第二个元素:

 class Manager
{
private:
    std::map<boost::uuids::uuid, Rental*> mainRegister;
    std::vector <Rental*> archiveRegister;
    std::vector<Client*> ClientRegister;
    std::vector<Vehicle*> VehicleRegister;

public:
    Manager();
    void createRental();
    void deleteRental(Rental rent);
    std::string showArchive() const;
    std::string showMain() const;
    std::string showVehicles() const;
    std::string showClients() const;
    void sortDate();
    void sortClient();
    bool checkVehicle(std::map <Vehicle*, Rental*> myMap);
    virtual ~Manager();

protected:

};

这是我想要做的:

void Manager::deleteRental(Rental* rent)
{
  for (auto it = mainRegister.cbegin(); it != mainRegister.cend()
  {
    if (it.second->getUUID() == rent->getUUID())
    {
      archiveRegister.push_back(it.second);
      mainRegister.erase(it++);
    }
    else
    {
      ++it;
    }
  }
}

我的主要目标是在映射中找到元素,第二个元素与传递给方法的对象具有相同的 UUID,然后将该对象移动到存档寄存器向量,然后从映射中删除该元素。

我得到的错误是:

-struct std::_Rb_tree_const_iterator >' 没有名为'second'的成员|

-没有匹配函数调用'std::vector::push_back(second_t >)'|

我知道我尝试访问 map 中每一对的第二个元素的方式可能是完全错误的,但我真的不知道该怎么做。

【问题讨论】:

  • 尝试使用it-&gt;second-&gt;getUUID()-&gt; 而不是. 来访问second
  • 您正在使用点 (.) 运算符取消引用指针类型的对象。按照@max66 的建议做

标签: c++ c++11 dictionary iterator stdmap


【解决方案1】:

您的 if 语句未正确使用 it 迭代器,迭代器类似于指针,因此应该是:

if (it->second->getUUID() == rent->getUUID())
      ^^

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-27
    • 1970-01-01
    • 2021-10-30
    相关资源
    最近更新 更多