在头文件中(我还没写过),结构已经像这样定义了
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&)
这有什么问题?我创建了一个非常小的片段。如果我在解释中错过了一些内容,请告诉我。
答案 0 :(得分:3)
场景后面的这一行调用了一个复制构造函数:
candidates.push_back(testMsg);
通过调用testMsg
代码中的复制构造函数,将push_back
const
引用的std::vector
放入向量中。但是,您的构造函数被声明为explicit
,因此std::vector
的代码无法访问它。
从复制构造函数中删除explicit
指示符将解决此问题。