Попытка вставить элемент в вектор

В заголовочном файле (который я не написал) структура была определена следующим образом

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&)

Что не так с этим? Я создал очень маленький фрагмент. Пожалуйста, дайте мне знать, если я что-то пропустил в моем объяснении.

2

Решение

Эта строка за сценой вызывает конструктор копирования:

candidates.push_back(testMsg);

testMsg тот push_back принимает const ссылка помещается в вектор, вызывая конструктор копирования внутри std::vectorкод. Тем не менее, ваш конструктор объявлен explicit, так std::vectorкод не может получить к нему доступ.

Удаление explicit Обозначение из конструктора копирования решит эту проблему.

3

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector