c++ 通过insert函数将元素添加到std::map [duplicate]

wlzqhblo  于 2023-05-24  发布在  其他
关注(0)|答案(1)|浏览(112)

此问题已在此处有答案

Call to make pair with mutex as argument fails. Cannot insert mutex onto unordered map(1个答案)
2天前关闭。
下面是我的代码片段:

class khaos_event
{
public:
  khoas_event(){};
  ~khoas_event(){};
public:
  bool wait(uint32_t timeout){
    std::chrono::milliseconds millis{timeout};
    std::unique_lock<std::mutex> lock(m_mtx);
    return m_cv.wait_for(lock, millis) == std::cv_status::no_timeout;
  };
  void notify(void){
    std::unique_lock<std::mutex>lock(m_mtx);
    m_cv.notify_one();
  };
private:
  std::condition_variable m_cv;
  std::mutex m_mtx;
};

int main()
{
  std::map<uint32_t, khaos_event> events;
  events.insert(std::make_pair(1, khaos_event()));
  ...
}

我用C++17编译了这段代码。并得到以下错误消息:

错误:没有匹配的函数用于调用“std::map<unsigned int,khaos_event>::insert(std::pair<unsigned int,khaos_event>)”

我该怎么解决这个问题?我哪里误会了?欢迎提出任何意见和建议。先谢谢你。

5fjcxozz

5fjcxozz1#

问题是数据成员m_cvm_mtx都是不可复制的(因为它们的复制ctor被删除了)。但是写的时候需要复印机

events.insert(std::make_pair(1, khaos_event())); //copy ctor is required here

下面是另一个人为的例子来说明同样的情况:

struct C
{
    C(const C&)=delete;
    C();
};       

class khaos_event
{
public:
  khaos_event(){};
  ~khaos_event(){}; 
 private:
     C c; //member variable
};

int main()
{
  std::map<uint32_t, khaos_event> events;
  events.insert(std::make_pair(1, khaos_event())); //copy ctor is required here   
}

相关问题