char askQuestion(string *questions[8], unique_ptr<binaryBase>answered)
Вы пытаетесь передать std::unique_ptr
по значению askQuestion()
, но это тип только для перемещения . Он представляет собой динамически размещенный объект, который не используется несколькими объектами одновременно. Вы можете только переместить unique_ptr или передать его по ссылке. Если вы намереваетесь передать владение уникальным указателем, вам нужно использовать std::move
:
askQuestion(questions, std::move(answered));
, где answered
- это std::unique_ptr<binaryBase>
. После того, как право собственности перешло к функции, вызывающая сторона не сможет снова использовать этот уникальный указатель.
Если вы не хотите передавать владение, тогда его можно передать по ссылке. Измените askQuestion()
, чтобы сделать это:
char askQuestion(string *questions[8], unique_ptr<binaryBase> &answered); //non-const lvalue reference
или
char askQuestion(string *questions[8], const unique_ptr<binaryBase> &answered); //const lvalue reference
При передаче по ссылке функция может использовать указатель, но не владеть им, если вы явно не используете std::move
в функция с уникальным указателем на неконстантную ссылку на значение (не может быть перемещена ссылка на постоянное значение).
bool checkAnswer(char answer, int place, binaryBase* reference)
В своем коде вы передаете указатель на binaryBase
функции checkAnswer()
. Опять же, для этой функции нет необходимости иметь уникальный указатель, поэтому вы можете передать уникальный указатель по ссылке, как показано выше, или использовать метод std::unique_ptr
*1033*, чтобы получить указатель на объект.
Возможно, вы захотите проверить этот ответ , в котором рассматриваются различные способы всесторонней передачи уникального указателя.