构造函数期望缺少对其他构造函数的调用/候选人期望 1 个参数,提供 0?
Constructor expecting missing call to other constructor / candidate expects 1 argument, 0 provided?
你可能已经看到了我昨天关于我在基于文本的冒险游戏中遇到的问题的帖子。我修复了所有这些问题并添加了一些功能,但是在添加自定义插槽对象的一些库存数组时,我的 Character 对象决定停止识别它们的初始化。
以下是基本代码:
角色类
class Character {
InvSlot inventory[30];
FoodSlot foodInv[10];
//Declaring armor slots, class, race, stats, etc
public:
//All of the function declarations
字符构造函数
Character::Character() :
//Initializing armor slots, class, race, stats, etc to default values
{
InvSlot inventory[30] = {emptyInv,...,emptyInv}; //The other 28 values are omitted here.
FoodSlot foodInv[10] = {emptyFood,...,emptyFood}; //The other 8 values are omitted here.
}
InvSlot
和FoodSlot
结构,带基本空插槽
struct InvSlot {
bool isUsed;
Item item;
InvSlot(Item i);
};
struct FoodSlot {
bool isUsed;
Item item;
FoodSlot(Food f);
};
InvSlot::InvSlot(Item i) : isUsed(false), item(i){}
InvSlot emptyInv = InvSlot(NoItem); //NoItem is a basic object of type Item which works
FoodSlot::FoodSlot(Food f) : isUsed(false, food(f), quantity(0){}
FoodSlot emptyFood = FoodSlot(NoFood); //Same deal with NoFood
错误
首先,InvSlot
和FoodSlot
的结构声明和构造函数定义给了我candidate expects 1 argument, 0 provided
的问题。其次,实际错误在Character
构造函数中的最终初始值设定项上(在大括号之前):no matching function for call to 'FoodSlot::FoodSlot()'
和no matching function for call to 'InvSlot::InvSlot()'
。问题是,我已经初始化了大括号中的数组,它们本身没有返回任何错误。最重要的是,这两个是字符类中仅有的两个参数,它们甚至使用InvSlot
或FoodSlot
对象。任何人都可以帮助弄清楚发生了什么,以及如何解决它吗?我已经检查了其他类似的问题,但它们没有帮助。如果我需要添加任何内容,或者我在输入这篇文章时是否遗漏了某些内容,请告诉我。
提前感谢!
您收到的错误消息基本上是找不到默认构造函数,显然是这种情况。当你写的时候
InvSlot inventory[30];
FoodSlot foodInv[10];
调用默认构造函数来初始化数组。您可以做的是为InvSlot
和FoodSlot
编写一个默认构造函数,该构造函数基本上返回一个空的InvSlot
和FoodSlot
。对于空,我的意思是您在初始值设定项列表中使用的对象的语义等效物(emptyInv,emptyFood)。
当前正在发生的事情的顺序:
- (在
main
的某个地方)尝试创建Character
的实例。 Character
正在创建其所有数据成员:inventory
和foodInv
。- 由于
inventory
是一个数组,因此构造函数需要调用 30 次,并且需要在执行Character
的构造函数之前调用它。由于您没有向编译器提供任何要专门调用的内容,因此它将尝试调用默认构造函数。由于您已经定义了参数化构造函数,因此默认值已被删除。
您需要什么:
选项1
在头文件中:
class Character {
InvSlot inventory[30] = {emptyInv,...,emptyInv};
FoodSlot foodInv[10] = {emptyFood,...,emptyFood};
这可能不是最佳选择,因为您会弄乱标题。
选项2
在构造函数的定义中:
Character::Character()
: inventory{{emptyInv,...,emptyInv}}, foodinv{{emptyFood,...,emptyFood}}
{
}
有趣的是,您的构造函数定义中已经有了:
符号,这意味着您首先尝试了正确的解决方案(或者您可能不知道该字符的含义)。它专门用于在字段上调用构造函数。
- "error: no matching function for call to"构造函数错误
- C++17复制构造函数,在std::unordereded_map上进行深度复制
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 为什么在C++中使用私有复制构造函数与删除复制构造函数
- 选择要调用的构造函数
- 如何委托派生类使用其父构造函数?
- 构造函数正在调用一个使用当前类类型的函数
- C++ 期望":"(冒号)的构造函数
- 构造函数期望缺少对其他构造函数的调用/候选人期望 1 个参数,提供 0?
- C 使用lambda进行隐式构造函数呼叫期望函数指针
- 如何初始化一个在C++中期望向量和变量的构造函数<int>?
- std::throw_with_nested期望Exception的虚基类的默认构造函数
- 试图为继承类的子类编写构造函数,猜测语法,期望的主表达式错误
- c++在派生类构造函数中期望的主表达式
- 编译时错误:期望的构造函数、析构函数或转换
- Node.js c++绑定错误:'('标记之前期望的构造函数、析构函数或类型转换
- 如何解决一系列关于迭代器构造函数的错误,包括期望的左值、缺失的转换和可行性
- 创建的对象总是未定义,并且在初始化构造函数时期望有标识符
- 为什么显式构造函数期望 std::shared_ptr 接受 nullptr