此问题已在此处有答案:
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>)”
我该怎么解决这个问题?我哪里误会了?欢迎提出任何意见和建议。先谢谢你。
1条答案
按热度按时间5fjcxozz1#
问题是数据成员
m_cv
和m_mtx
都是不可复制的(因为它们的复制ctor被删除了)。但是写的时候需要复印机下面是另一个人为的例子来说明同样的情况: