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("[email protected]")
.SetSubject("C++ builders")
.SetBody("I like this API, don't you?")
.Build();
...
EmailSender emailSender;
...
emailSender.SendEmail(mail);
...
}
这只是伪代码。
我想将参数(=mail)复制到本地对象(=mEmail)。
但我做不到。
如果我添加了默认构造函数(Email(){}),这个问题就解决了。但我不确定这是一个很好的解决方案。
你能给我更多好的解决方案吗?
您的EmailSender
类包含一个Email
名为的对象mEmail
。这个mEmail
对象当然需要初始化(构造)。
问题是mEmail
需要在构造函数体运行之前EmailSender
构造它,编译器只能使用不存在的默认构造函数对其进行默认构造,从而导致您的错误。
解决方案是mEmail
在EmailSender
构造函数初始化列表中显式初始化(构造):
EmailSender(Email const& email)
: mEmail{ email } // Initialize (construct) using the copy-constructor
{
// Empty body
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句