2015-05-28 25 views
1

我有這個奇怪的問題,其中的值是放在構造函數中,但這不會返回正確的對象,它只是返回一個錯誤設置值的對象(默認值,我想)C++:構造函數設置錯誤的值

在此屏幕上看看:

enter image description here

我確信數據是正確的,當我調試,並進入構造函數。這裏是一個例子的UserDetails的構造函數:

UserDetails::UserDetails(QString _maxDataRate, Request _request){ 

unsigned int intMaxDataRate = _maxDataRate.toUInt(); 
UserDetails(intMaxDataRate, _request); 
} 

UserDetails::UserDetails(unsigned int _maxDataRate, Request _request) : 
maxDataRate(_maxDataRate), request(_request) { 
this->userID = IDGenerator++; 
} 

我知道這一定是一個經典的C++錯誤,如參考問題或類似的東西,但我不記得這可能是什麼。

回答

3

您從構造函數中調用構造函數,即您正在創建一個立即銷燬的臨時對象。

你需要做到以下幾點:

UserDetails::UserDetails(QString _maxDataRate, Request _request) 
: UserDetails(_maxDataRate.toUInt(), _request); 
{ 
} 
1

你不能從另一個調用構造函數 - 行

UserDetails(intMaxDataRate, _request); 

創建一個不同的,無名的UserDetails這是立即銷燬實例。

在C++ 11,你可以構造轉發到其他:

UserDetails::UserDetails(QString _maxDataRate, Request _request) 
    : UserDetails(_maxDataRate.toUInt(), _request); 
{ 
} 
在C++ 03

和更早的版本,你需要或者複製構造函數代碼或使用一個單獨的函數,你來自兩者的電話。

附註:在這種情況下,我相信你不應該有一個構造函數接受一個字符串,但在類之外執行轉換(並驗證它)。