我有这个奇怪的问题,其中值很好地放在构造函数中,但是这个没有返回正确的对象,它只返回一个具有错误设置值的对象(默认的一个,我猜)
看看这个屏幕:
我确信在调试并进入构造函数时数据是正确的。这是例如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 ++错误,比如参考问题或类似的东西,但我不记得这可能是什么。
答案 0 :(得分:3)
您正在构造函数中调用构造函数,即您正在创建一个立即销毁的临时对象。
您需要执行以下操作:
UserDetails::UserDetails( QString _maxDataRate, Request _request )
: UserDetails(_maxDataRate.toUInt(), _request);
{
}
答案 1 :(得分:1)
您无法从另一个构建函数中调用 -
行 UserDetails(intMaxDataRate, _request);
创建一个不同的,未命名的UserDetails
实例,该实例会立即销毁。
在C ++ 11中,您可以将构造函数转发给另一个:
UserDetails::UserDetails(QString _maxDataRate, Request _request)
: UserDetails(_maxDataRate.toUInt(), _request);
{
}
在C ++ 03及更早版本中,您需要复制构造函数代码或使用从两者调用的单独函数。
旁注:在这种情况下,我认为你不应该有一个完全接受字符串的构造函数,而是在类之外执行转换(并验证它)。