构造函数期望缺少对其他构造函数的调用/候选者期望 1 个参数,0 提供?
Constructor expecting missing call to other constructor / candidate expects 1 argument, 0 provided?
您可能已经看到我昨天 post 关于我在基于文本的冒险游戏中遇到的问题。我修复了所有这些问题并添加了一些功能,但是在添加一些自定义 Slot 对象的清单数组时,我的 Character 对象决定停止识别它们的初始化。
基本代码如下:
字符Class
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()'
。问题是,我已经在花括号中初始化了数组,它们本身没有返回任何错误。除此之外,这两个是字符 class 甚至使用 InvSlot
或 FoodSlot
对象的仅有的两个参数。任何人都可以帮助弄清楚发生了什么,以及如何解决它?我已经检查过其他类似的问题,但没有帮助。让我知道是否需要添加任何内容,或者在输入 post.
时是否遗漏了什么
提前致谢!
你得到的错误信息基本上就是找不到默认构造函数,明明就是这样。当你写
InvSlot inventory[30];
FoodSlot foodInv[10];
调用默认构造函数来初始化您的数组。你可以做的是为 InvSlot
和 FoodSlot
编写一个默认构造函数,它基本上是 return 一个空的 InvSlot
和 FoodSlot
。对于空,我的意思是在语义上等同于您在初始化列表中使用的对象(emptyInv、emptyFood)。
当前发生的顺序:
- (
main
中某处)尝试创建 Character
. 的实例
Character
正在创建其所有数据成员:inventory
和 foodInv
.
- 由于
inventory
是一个数组构造函数需要被调用30次,并且需要在Character
的构造函数执行之前被调用。因为您没有为编译器提供任何要专门调用的东西,所以它会尝试调用默认构造函数。并且由于您已经定义了参数化构造函数,因此默认值已被删除。
您需要:
选项1
在您的 header 文件中:
class Character {
InvSlot inventory[30] = {emptyInv,...,emptyInv};
FoodSlot foodInv[10] = {emptyFood,...,emptyFood};
这可能不是最佳选择,因为您弄乱了 header。
选项2
在构造函数的定义中:
Character::Character()
: inventory{{emptyInv,...,emptyInv}}, foodinv{{emptyFood,...,emptyFood}}
{
}
有趣的是,您的构造函数定义中已经有了 :
符号,这意味着您首先尝试了正确的解决方案(或者您可能不知道该字符的含义)。它专门用于在字段上调用构造函数。
您可能已经看到我昨天 post 关于我在基于文本的冒险游戏中遇到的问题。我修复了所有这些问题并添加了一些功能,但是在添加一些自定义 Slot 对象的清单数组时,我的 Character 对象决定停止识别它们的初始化。
基本代码如下:
字符Class
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()'
。问题是,我已经在花括号中初始化了数组,它们本身没有返回任何错误。除此之外,这两个是字符 class 甚至使用 InvSlot
或 FoodSlot
对象的仅有的两个参数。任何人都可以帮助弄清楚发生了什么,以及如何解决它?我已经检查过其他类似的问题,但没有帮助。让我知道是否需要添加任何内容,或者在输入 post.
提前致谢!
你得到的错误信息基本上就是找不到默认构造函数,明明就是这样。当你写
InvSlot inventory[30];
FoodSlot foodInv[10];
调用默认构造函数来初始化您的数组。你可以做的是为 InvSlot
和 FoodSlot
编写一个默认构造函数,它基本上是 return 一个空的 InvSlot
和 FoodSlot
。对于空,我的意思是在语义上等同于您在初始化列表中使用的对象(emptyInv、emptyFood)。
当前发生的顺序:
- (
main
中某处)尝试创建Character
. 的实例
Character
正在创建其所有数据成员:inventory
和foodInv
.- 由于
inventory
是一个数组构造函数需要被调用30次,并且需要在Character
的构造函数执行之前被调用。因为您没有为编译器提供任何要专门调用的东西,所以它会尝试调用默认构造函数。并且由于您已经定义了参数化构造函数,因此默认值已被删除。
您需要:
选项1
在您的 header 文件中:
class Character {
InvSlot inventory[30] = {emptyInv,...,emptyInv};
FoodSlot foodInv[10] = {emptyFood,...,emptyFood};
这可能不是最佳选择,因为您弄乱了 header。
选项2
在构造函数的定义中:
Character::Character()
: inventory{{emptyInv,...,emptyInv}}, foodinv{{emptyFood,...,emptyFood}}
{
}
有趣的是,您的构造函数定义中已经有了 :
符号,这意味着您首先尝试了正确的解决方案(或者您可能不知道该字符的含义)。它专门用于在字段上调用构造函数。