Преобразование unique_ptr для сравнения CHAR_INFO * - PullRequest
0 голосов
/ 25 марта 2020

Исходя из этого, я знаю, что для функции WriteConsoleOutput () требуется аргумент const CHAR_INFO *, и я пытаюсь выяснить, есть ли способ использовать предоставленный мною код или использовать необработанные указатели? https://docs.microsoft.com/en-us/windows/console/writeconsoleoutput Ошибка говорит мне, что мне нужно либо преобразовать тип, который я предоставил, либо просто отказаться от идеи. Я пробовал кастинг, но это ни к чему не привело ... Я новичок в интеллектуальных указателях, так что если есть объяснение, извините.

std::unique_ptr<const CHAR_INFO> screenBuffer;
screenBuffer = std::make_unique<const CHAR_INFO>(consoleWidth * consoleHeight);
WriteConsoleOutput(hConsole, screenBuffer.get(), { (short)consoleWidth * (short)consoleHeight }, { 0,0 }, &consoleSmallRect);
Severity    Code    Description Project File    Line    Suppression State
Error   C2664   '_CHAR_INFO::_CHAR_INFO(_CHAR_INFO &&)': cannot convert argument 1 from '_Ty' to 'const _CHAR_INFO &'   Snek    C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.24.28314\include\memory  2055    

1 Ответ

3 голосов
/ 25 марта 2020

Это должно быть

std::unique_ptr<CHAR_INFO []> screenBuffer;
screenBuffer = std::make_unique<CHAR_INFO[]>(consoleWidth * consoleHeight);

Я добавляю [], когда вам нужен массив.
Я сбрасываю const, чтобы вы могли заполнить его.

std::vector<CHAR_INFO> screenBuffer(consoleWidth * consoleHeight); is другая альтернатива.

...