C++ 如何在第一个调用的构造函数中正确创建和传递对象
我有密码:C++ 如何在第一个调用的构造函数中正确创建和传递对象,c++,c++11,C++,C++11,我有密码: UserDialog::UserDialog(DatabaseHandler &db, QWidget *parent) : UserDialog{db, User(), parent} { } UserDialog::UserDialog(DatabaseHandler &db, User &user, QWidget *parent): QDialog{parent}, ui{new
UserDialog::UserDialog(DatabaseHandler &db,
QWidget *parent) :
UserDialog{db, User(), parent}
{
}
UserDialog::UserDialog(DatabaseHandler &db, User &user, QWidget *parent):
QDialog{parent},
ui{new Ui::UserDialog},
mDB{db},
mUser{user}
{
//...
}
如何正确地创建新的用户对象并将其作为调用构造函数的参数传递
UserDialog{db, User(), parent}
由于构造函数需要一个可变的左值,因此必须提供一个现有的
User
对象:
User user;
UserDialog{db, user, parent};
如果不要求用户对象继续存在,则可以将构造函数参数类型更改为
const user&
,在这种情况下,将接受临时值。由于构造函数需要可变左值,因此必须提供现有的user
对象:
User user;
UserDialog{db, user, parent};
User user;
UserDialog{db, user, parent}
如果不要求用户对象继续存在,则可以将构造函数参数类型更改为const user&
,在这种情况下,将接受临时参数
User user;
UserDialog{db, user, parent}
如果要传递引用,则需要在传递之前创建该引用
如果你传递一个引用,你需要在传递它之前创建那个引用。
我尝试从java迁移,所以我觉得不象C++程序员。看来,我理解bug。非常感谢。我尝试从java迁移,所以我觉得不像C++程序员。看来,我理解bug。非常感谢。你能展示一下mUser
(和mDB
)的定义吗?它就在这里用户mUser
在这种情况下,我建议通过将参数更改为User const&User
来解决您的问题。我会尝试一下。谢谢你能展示一下mUser
(和mDB
)的定义吗?它就在这里用户mUser
在这种情况下,我建议通过将参数更改为User const&User
来解决您的问题。我会尝试一下。谢谢如果mUser
是一个参考,这将是一个错误。(如果它不是一个参考,那么人们会对参数user
的声明提出疑问)谢谢您的快速回答!我将重写没有临时对象的构造函数,因为我无法使用constuser&
。当传递的对象传入第二个构造函数(没有第一个构造函数)时,我需要修改它。mUser
不是引用。那么,我不清楚第一个构造函数的用途。如果构造函数必须修改给定的用户
对象,那么第一个构造函数似乎在某种程度上违反了这一点,因为它没有用户
对象的概念。也许你需要重新思考你的类的用途?@ghostman:看来你需要指针(可以是nullptr
)而不是引用。如果mUser
是引用,这将是一个错误。(如果它不是一个参考,那么人们会对参数user
的声明提出疑问)谢谢您的快速回答!我将重写没有临时对象的构造函数,因为我无法使用constuser&
。当传递的对象传入第二个构造函数(没有第一个构造函数)时,我需要修改它。mUser
不是引用。那么,我不清楚第一个构造函数的用途。如果构造函数必须修改给定的用户
对象,那么第一个构造函数似乎在某种程度上违反了这一点,因为它没有用户
对象的概念。也许你需要重新思考你的类的用途?@ghostman:看来你需要的是指针(可以是nullptr
)而不是引用。