2012-02-27 123 views
2

我有支持本機C++類型以及Qt類型的代碼。例如,有「等效」的stringQStringQString通過引用問題

我有2個功能,一個需要string的和一個需要QString的。 QString版本將參數轉換爲string's,然後調用該函數的string版本。

這是問題的一些通用代碼:

int myClass::LoadQString(const QString &tagName, QString &toReturn) 
{ 
    string tag = tagName.toStdString(); 
    string ret = toReturn.toStdString(); 
    //string& ret = toReturn.toStdString(); //This gives me an error 

    return LoadString(tag, ret); 
} 

int myClass::LoadString(const string& tagName, string& toReturn) 
{ 
    toReturn = "hello world!"; 

    ... 
} 

所以,這段代碼可以編譯和運行...但是,當我打電話LoadQString()第二個參數是一個空QString一旦返回。您可以在我的評論行中看到我嘗試使用string& ret = ...以獲取參考。如果我打電話LoadString(),然後在返回時檢查toReturn的值,它將是「hello world!」如預期。

只是試圖讓LoadQString()正常工作。

感謝您的幫助!

回答

3

您應該std::stringstd::string版本調用

int myClass::LoadQString(const QString &tagName, QString &toReturn) 
{ 
    string tag = tagName.toStdString(); 
    string ret = toReturn.toStdString(); 
    int retCode = LoadString(tag, ret); 
    toReturn = QString::fromStdString(ret); 
    return retCode; 
} 
0

你應該叫LoadString,不LoadXMLAttribute,然後分配給rettoReturn你叫後,然後返回intLoadString返回。

+0

對不起,修正了代碼......我是從實際上覆制粘貼的,忘了改變東西 – user869525 2012-02-27 19:47:26

+0

@ user869525你仍然需要爲'toReturn'指定'ret'來向'LoadQString的調用者傳播'ret '。 – 2012-02-27 19:48:34

0

首先,轉換回QString,toStdString創建的std :: string對象作爲暫時的。所以很自然你不能得到一個引用,你必須將結果存儲在一個值中,或者通過一個const引用來延長它的生命週期。

但是,你在做什麼,假設toReturn是嚴格意義上的輸出參數和加載鏈執行實際工作:如果toReturn不是嚴格意義上的輸出參數也輸入一個(我建議

int myClass::LoadQString(const QString &tagName, QString &toReturn) 
{ 
    string tag = tagName.toStdString(); 
    string ret; 
    int result = LoadXMLAttribute(tag, ret); 
    toReturn = QString::fromStdString(ret); 
    return result; 
} 

你避免這個,因爲它是一個相當混亂的設計實踐):

int myClass::LoadQString(const QString &tagName, QString &toReturn) 
{ 
    string tag = tagName.toStdString(); 
    string ret = toReturn.toStdString(); 
    int result = LoadXMLAttribute(tag, ret); 
    toReturn = QString::fromStdString(ret); 
    return result; 
} 

很簡單。從QString轉換爲std :: string,調用接受std :: strings的函數,存儲返回值,並將輸出參數(ret)轉換回分配給輸出參數(toReturn)的QString。

+0

這完全是一個輸入參數。謝謝,別人有同樣的想法,它的工作!非常感激! – user869525 2012-02-27 19:51:51