Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/133.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在第一个调用的构造函数中正确创建和传递对象_C++_C++11 - Fatal编程技术网

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
)而不是引用。