簡體   English   中英

將QString轉換為QString的指針

[英]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.

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