В настоящее время я пишу код c++ для платформы AVR, и я хочу отключить что-то, что принципиально не копируется. Учитывая, что я уже использую функции c++ 0x, я думал, что хорошим способом сделать это будет использование спецификатора =delete
:
write_only(write_only const&) = delete;
Однако, когда я пытаюсь скомпилировать это, я получаю следующую ошибку:
error: invalid pure specifier (only '= 0' is allowed) before ';' token
Это говорит о том, что эта особенность c++ 0x не поддерживается avr-gcc. Я что-то делаю неправильно? Если нет, то каково наилучшее обходное решение для этого?
Я использую WinAVR-20100110 для компиляции.
WinAVR устарел, вместо этого используйте Atmel Studio.
Если вы действительно хотите продолжить работу с WinAVR, найдите исполняемый файл gcc
или g++
и запустите его с -v
аргумента командной строки -v
, а затем сообщите нам, какую версию он сообщает. Обратите внимание, что удаленные функции поддерживаются в GCC начиная с версии 4.4 (ссылка).
В любом случае вы должны добавить -std=gnu++0x
или -std=c++11
или -std=gnu++11
параметров при компиляции для использования возможностей С++ 11, или -std=c++1y
или -std=gnu++1y
чтобы включить функции С++ 14 (С++ 1y).