[英]Convert QString to Pointer of QString
因為我不是C(++)專家,所以我對編譯器的某些頑固性感到沮喪,因為他們不想將QString轉換為QString *。 我有一個功能:
bool getNextMessage(int sId, QString *msg, QString *cmd)
我在這里使用指針,是因為我不能在C中返回多個變量(損壞的Perl編碼器;)),並且我想在while(getNextMessage(...)){...}樣式循環中使用它。 在該函數內部,有一些SQL foo和以下代碼:
msg = QString("");
cmd = QString("");
return false;
編譯器由此產生的所有內容是:
cannot convert 'QString' to 'QString*' in assignment
親愛的人們,請您為我揭開謎底嗎? 謝謝。 :)
編輯:解決方案:現在使用引用感謝萊姆指向它們的指針。
為此,通常使用引用 ,而不是指針 。 對於C ++新手,很難獲得區別。 簡短的解釋是“引用是更安全的指針”。
bool getNextMessage(int sId, QString &msg, QString &cmd)
這樣,您可以調用該方法而無需先轉換為指針,並且可以使用與普通變量相同的語法使用引用,因此用於設置字符串內容的代碼很好。
如果您要堅持使用指針-或者要了解如何使用指針-這是使用指針的方法:
*msg = QString("");
*msg
取消引用msg
,這意味着您正在使用指針后面的對象。 對於函數調用,有->
運算符。
呼喚
msg = new QString("");
在語法上也是正確的,但是沒有按照您的預期做! 這行意味着您分配了一個新的QString對象,並獲得了這個新創建的對象的指針。 然后,將此指針分配給msg
。 這對於在函數中跟隨代碼很好。 但是,您更改了msg
本身(指針地址),而不是msg
指向的內存。 這意味着,呼叫者在這里不會注意到任何東西 。 函數調用之后,調用方將使用舊指針。
嘗試使用以下內容。
*msg = QString("");
*cmd = QString("");
確保您的指針已初始化。
QString
不是QString*
。 也許您想取消引用指針並分配給它指向的對象:
*msg = QString("");
或者我期望以下是等效的:
*msg = "";
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.