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("[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构造它,编译器只能使用不存在的默认构造函数对其进行默认构造,从而导致您的错误。

解决方案是mEmailEmailSender 构造函数初始化列表中显式初始化(​​构造)

EmailSender(Email const& email)
    : mEmail{ email }  // Initialize (construct) using the copy-constructor
{
    // Empty body
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

我可以在带有类型提供程序的 F# 类库中创建 API 网关,并在 C# 解决方案中使用它来使用 swagger 在外部 Web Api 上获取智能感知吗?

我可以访问位于 Visual Studio (.net/C#) 中不同解决方案中的源代码吗

我可以在cgo中使用c ++吗?

我可以在C ++中使用Tk吗?

我可以在 C# 中约束构造函数参数吗

我在 C++ 中对 Project Euler 的 #2 的解决方案有什么问题?

我可以在我的C程序中使用LXC库吗?

我可以为联合的C ++函数设置默认参数吗

我可以针对空检查C ++迭代器吗?

如何从命令行使用msbuild编译我的C#解决方案

我可以在没有项目设置的情况下在 c# 代码中#define 一个常量解决方案吗?

请解释此 C 的 HackerRank 问题的解决方案代码

我可以使用C / C ++编译器吗?

我可以以某种方式在ANSI C中使用嵌套函数吗?

我可以在 C 中的函数返回中使用后增量吗?

我们可以在C ++类的成员函数中使用cin >>吗?

我们可以在C中使用没有名称的函数吗?

C#+编程逻辑-我可以从构造对象访问构造函数对象吗?

我可以在QNX中使用C ++ 11吗?

我可以在C ++中使用ifstream数组吗

我们可以在Python中使用C代码吗?

我可以在C ++中的for循环中使用指针吗?

我可以在Eclipse插件中使用C ++或Python吗?

我可以在C#中使用无类型的集合吗?

我可以在 C++ 中使用 TableDrivenTests 概念吗?

我可以在C#中使用saxon导入查询吗?

我可以在C ++项目中使用Watson TTS吗?

我可以在C ++中使用“类型类型”吗?

我可以在C程序中使用GET方法吗