gpt4 book ai didi

c++ - 试图将元素插入 vector

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

在一个头文件中(我没写过),一个struct是这样定义的

struct MemoryMessage : public boost::counted_base { /*, public FastAlloc*/
explicit MemoryMessage(MemoryMessageType aType)
: theType(aType) {}
explicit MemoryMessage(MemoryMessageType aType, MemoryAddress anAddress)
: theType(aType) {}
explicit MemoryMessage(MemoryMessageType aType, MemoryAddress anAddress, int anIdentifier)
: theType(aType) {}
explicit MemoryMessage(MemoryMessageType aType, MemoryAddress anAddress, VirtualMemoryAddress aPC)
: theType(aType) {}
explicit MemoryMessage(MemoryMessageType aType, MemoryAddress anAddress, VirtualMemoryAddress aPC, DataWord aData)
: theType(aType) {}
explicit MemoryMessage(MemoryMessage & aMsg)
: theType(aMsg.theType) {}
}

稍后在我的代码中,我写了

MemoryMessage testMsg;
class foo() {
foo()
: testMsg(MemoryMessage::test)
{}
std::vector< MemoryMessage > candidates;

void bar() {
candidates.push_back(testMsg);
}
}

但是我得到这个错误

error: no matching function for call to 'MemoryMessage::MemoryMessage(const MemoryMessage&)’
note: candidates are:MemoryMessage::MemoryMessage(MemoryMessage&)

这有什么问题?我创建了一个非常小的片段。如果我在解释中遗漏了什么,请告诉我。

最佳答案

幕后的这一行调用了一个复制构造函数:

candidates.push_back(testMsg);   

push_back 引用的 testMsg 通过调用 std::vector 中的复制构造函数放入 vector 中 的代码。但是,您的构造函数被声明为 explicit,因此 std::vector 的代码无法访问它。

从复制构造函数中删除 explicit 指示符将解决此问题。

关于c++ - 试图将元素插入 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24474684/

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