Строковые литералы являются постоянными данными в C ++ (компиляторы, как правило, хранят их в постоянной памяти, когда это возможно).
В C ++ 11 и более поздних версиях вы больше не можете назначать строковый литерал непосредственно для указатель на non-const-char (char*
) 1 .
1: хотя некоторые компиляторы C ++ 11 могут разрешать его как нестандартное расширение для обратной совместимости, которое может потребоваться включить вручную через флаг компилятора.
Итак, вам нужно объявить port_name
как указатель на const-char вместо (const char *
или char const *
). Но тогда вам придется привести его обратно к неконстантному char*
при передаче его на SerialPort()
:
const char *port_name = "\\\\.\\COM4";
SerialPort arduino(const_cast<char*>(port_name));
Или просто:
SerialPort arduino(const_cast<char*>("\\\\.\\COM4"));
В качестве альтернативы можно объявить port_name
как неконстантный char[]
буфер, скопировать в него строковый литерал и затем передать его в SerialPort()
:
char port_name[] = "\\\\.\\COM4";
SerialPort arduino(port_name);