В заголовочном файле (который я не написал) структура была определена следующим образом
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);
testMsg
тот push_back
принимает const
ссылка помещается в вектор, вызывая конструктор копирования внутри std::vector
код. Тем не менее, ваш конструктор объявлен explicit
, так std::vector
код не может получить к нему доступ.
Удаление explicit
Обозначение из конструктора копирования решит эту проблему.