簡體   English   中英

C2440:“ =”:無法從“ const char [9]”轉換為“ 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM