![](/img/trans.png)
[英]error C2440: '=' : cannot convert from 'const char [2]' to 'char'
[英]C2440: '=': cannot convert from 'const char [9]' to 'char*'
我正在用C ++編寫Qt5項目。 構建項目會出現錯誤:
C2440:“ =”:無法從“ const char [9]”轉換為“ char *”
指向下面的代碼行:
port_name= "\\\\.\\COM4";//COM4-macine, COM4-11 Office
SerialPort arduino(port_name);
if (arduino.isConnected())
qDebug()<< "ardunio connection established" << endl;
else
qDebug()<< "ERROR in ardunio connection, check port name";
//the following codes are omitted ....
這是什么問題,我該如何解決?
與C相反,在C ++中,字符串文字是const
。 因此,指向此類字符串文字的任何指針也必須為const
:
const char* port_name = "\\\\.\\COM4"; // OK
// char* port_name = "\\\\.\\COM4"; // Not OK
字符串文字是C ++中的常量數據(編譯器傾向於在可能的情況下將其存儲在只讀內存中)。
在C ++ 11和更高版本中,您不再可以將字符串文字直接分配給指向非常量字符 ( char*
) 1的指針 。
1:盡管某些C ++ 11編譯器可能允許它作為向后兼容的非標准擴展,但可能需要通過編譯器標志手動啟用。
因此,您需要將port_name
聲明為指向const-char的指針 ( const char *
或char const *
)。 但是,當將其傳遞給SerialPort()
時,您將不得不將其強制轉換回非const char*
:
const char *port_name = "\\\\.\\COM4";
SerialPort arduino(const_cast<char*>(port_name));
或者簡單地:
SerialPort arduino(const_cast<char*>("\\\\.\\COM4"));
替代方法是將port_name
聲明為非const char[]
緩沖區,將字符串文字復制到其中,然后將其傳遞給SerialPort()
:
char port_name[] = "\\\\.\\COM4";
SerialPort arduino(port_name);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.