【问题标题】:"... is implicitly deleted because the default definition would be ill-formed:" - Initialization of a WebServer() object“...被隐式删除,因为默认定义格式不正确:” - WebServer() 对象的初始化
【发布时间】:2020-03-21 12:35:37
【问题描述】:

根据文档,WebServer 在 .cpp 类中是这样初始化的

WebServer server(80);

为了适应我创建的课程,我想做。

private:
   WebServer server;

在我的标题中和

this->server = WebServer(80);

在我的类定义中,所以我有一个正常的 WebServer 声明。 但这会引发错误: ....' 被隐式删除,因为 默认定义格式错误:

如何正确初始化 WebServer?

编辑: 好的,现在我的代码如下所示:

class MyClass{
    public:
        MyClass(String clientId, String clientSecret, String redirectUri);
    private:
        String clientId;
        String clientSecret;
        String redirectUri;
        WebServer server;
};

MyClass::MyClass(String clientId, String clientSecret, String redirectUri):clientId{clientId}, clientSecret{clientSecret}, redirectUri{redirectUri}, server{80}{}

【问题讨论】:

  • Foo::Foo() : server{80} {}

标签: c++ arduino esp32


【解决方案1】:

由于RAII,指令WebServer server; 尝试使用默认构造函数以WebServer 类型的对象初始化变量。

要使用不同的构造函数来构造这个实例变量,你必须在构造函数的初始化列表中提供它:

MyClass::MyClass()
 :server{80}
{
}

这告诉编译器使用初始化值80 构造server 对象,然后将其提供给WebServer 的构造函数。

【讨论】:

  • 感谢您提供的信息!我现在为服务器对象使用不同的构造函数。但是在尝试编译时仍然出现错误。这和我的声明还有关系吗?
  • 哦,对不起,错误是:错误:使用已删除的函数 'std::unique_ptr<_tp _dp>::unique_ptr(const std::unique_ptr<_tp _dp>&) [with _Tp = HTTP上传; _Dp = std::default_delete]' - 注意:此处声明:unique_ptr(const unique_ptr&) = delete;
  • 所以这完全是另一个问题,您正在尝试复制 unique_ptr,这是不可能的,因为复制构造函数已被明确删除。也许 WebServer 有一个 unique_ptr,而您正在做隐式复制而不是仅仅初始化它?
  • 好的,谢谢,我想我找到了问题!谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-20
  • 1970-01-01
  • 2015-08-20
  • 1970-01-01
  • 2013-11-21
  • 1970-01-01
相关资源
最近更新 更多