gpt4 book ai didi

c++ - 缺少默认构造函数 - 但我没有调用它?

转载 作者:太空宇宙 更新时间:2023-11-04 12:39:32 25 4
gpt4 key购买 nike

我正在编写一个 C++ 应用程序,其中我有一个带有两个嵌套结构的 Controller 类,在我的头文件中定义如下:

class Controller {
struct help_message { // controller.hpp, line 19
std::string summary;
std::string details;
help_message(const std::string&, const std::string&);
};

struct player_command {
cmd_t cmd;
help_message help;
// cmd_t is my own typedef, irrelevant for this question
player_command(const cmd_t&, const help_message&);
};

// more members...
};

在我的源文件中,我有这个:

Controller::player_command::player_command(const Controller::cmd_t& c, const help_message& h) {
cmd = c;
help = h;
};

Controller::help_message::help_message(const std::string& s, const std::string& d) {
summary = s;
details = d;
};

我认为这很好,但是当我编译时,这就是我得到的(controller.cpp 第 12 行是上面源代码片段的第一行):

g++  -g -Wall -std=c++0x  -c -o controller.o controller.cpp
controller.cpp: In constructor ‘palla::Controller::player_command::player_command(void (palla::Controller::* const&)(const args_t&), const palla::Controller::help_message&)’:
controller.cpp:12:93: error: no matching function for call to ‘palla::Controller::help_message::help_message()’
controller.cpp:12:93: note: candidates are:
In file included from controller.cpp:7:0:
controller.hpp:22:3: note: palla::Controller::help_message::help_message(const string&, const string&)
controller.hpp:22:3: note: candidate expects 2 arguments, 0 provided
controller.hpp:19:9: note: palla::Controller::help_message::help_message(const palla::Controller::help_message&)
controller.hpp:19:9: note: candidate expects 1 argument, 0 provided
controller.hpp:19:9: note: palla::Controller::help_message::help_message(palla::Controller::help_message&&)
controller.hpp:19:9: note: candidate expects 1 argument, 0 provided
make: *** [controller.o] Error 1

根据我的推断,编译器在某处试图调用 help_message 的默认构造函数,而该构造函数并不存在。然后它尝试将调用与我创建的构造函数以及生成的复制构造函数和赋值运算符进行匹配,并在参数数量上失败。

但是我的代码的哪一部分调用了默认构造函数?我该如何解决这个错误?

最佳答案

player_command()构造函数首先默认构造help,然后赋值给它:

Controller::player_command::player_command(const Controller::cmd_t& c, const help_message& h) {
cmd = c;
help = h;
};

将其更改为:

Controller::player_command::player_command(const Controller::cmd_t& c, const help_message& h)
: cmd(c),
help(h)
{
};

参见 Benefits of Initialization lists

关于c++ - 缺少默认构造函数 - 但我没有调用它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54910082/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com