C++ C++;,我可以在生成器模式中使用默认构造函数吗?请检查我的问题和解决方案
这只是伪代码 我想将参数(=mail)复制到本地对象(=mEmail) 但我不能 如果我添加了默认构造函数(Email(){}),这个问题就解决了。但我不确定这是一个好的解决方案C++ C++;,我可以在生成器模式中使用默认构造函数吗?请检查我的问题和解决方案,c++,design-patterns,builder-pattern,C++,Design Patterns,Builder Pattern,这只是伪代码 我想将参数(=mail)复制到本地对象(=mEmail) 但我不能 如果我添加了默认构造函数(Email(){}),这个问题就解决了。但我不确定这是一个好的解决方案 您能给我一个更好的解决方案吗?您的EmailSender类包含一个名为mEmail的Email对象。这个mEmail对象当然需要初始化(构造) 问题是mEmail需要在EmailSender构造函数的主体运行之前构造,而编译器只能使用不存在的默认构造函数来默认构造它,从而导致错误 解决方案是在EmailSender构造
您能给我一个更好的解决方案吗?您的
EmailSender
类包含一个名为mEmail
的Email
对象。这个mEmail
对象当然需要初始化(构造)
问题是mEmail
需要在EmailSender
构造函数的主体运行之前构造,而编译器只能使用不存在的默认构造函数来默认构造它,从而导致错误
解决方案是在EmailSender
构造函数初始值设定项列表中显式初始化(构造)mEmail
:
你会犯什么错误?什么是
Aobject
?它包含哪些成员?请花点时间阅读,带上SO,阅读,以及。最后,请在你的问题中包括一个(强调最小部分)和一个复制粘贴(作为文本!),在你得到注释的代码中包含完整的错误。谢谢,但是如果EmailSender类是singleton,我认为你的解决方案不可用。EmailSender():mEmail(使电子邮件对象为空)这个怎么样?它正在工作。但我不确定这是否合理。“请让我知道你的意见。”森索拉玛说,“那么我觉得你的设计有问题。如果EmailSender
应该是一个可以用来发送多封不同电子邮件的单一对象,那么它就不应该真正拥有自己的mEmail
成员对象。相反,它应该有一个Send
功能,它可以(引用)一封电子邮件
对象。谢谢。实际上,目前我使用“struct Email{…};”来简单地解决这个问题。(如C数据结构)。但我希望用C++语言解决这个问题,设计好。
class Email
{
public:
//Email(){} //If I added this, this problem is resolved. But I am not sure this is good solution.
Email(EmailBuilder builder){
...
}
public class EmailBuilder {
EmailBuilder() {...};
EmailBuilder SetAddress(...) {...};
EmailBuilder SetSubject(...) {...};
EmailBuilder SetBody(...) {...};
Email Build() {...};
}
};
class EmailSender
{
public:
...
SendEmail(const Email& mail)
{
mEmail = mail; }
private:
Email mEmail; //error : emailsender.h(8): error C2512: 'Email': no appropriate default constructor available
}
int main()
{
Email mail = new Email.Builder
.SetAddress("me@mail.com")
.SetSubject("C++ builders")
.SetBody("I like this API, don't you?")
.Build();
...
EmailSender emailSender;
...
emailSender.SendEmail(mail);
...
}
EmailSender(Email const& email)
: mEmail{ email } // Initialize (construct) using the copy-constructor
{
// Empty body
}