为什么有一个指向此代码行(第 7 行)的"no matching call for function"错误?



这是一个与其他人类似的问题,但是我已经检查了将其标记为重复的内容,并且一般回答对我没有帮助,因为我要么不理解它们,要么它们与我的问题无关。我需要帮助和/或专门解决此问题的解决方案。请,谢谢。我正在构建一种"编程语言"(但它不是真的,只是不知道如何描述它),在我的 ContainerList 类中,我不断收到此错误,说没有匹配的函数调用。为什么我会收到此错误?

我尝试过操作何时何地使用或定义构造函数,或者它是否存在。但似乎没有运气。我查看了 MemoryContainer 类,似乎没有任何原因导致错误。

这是我的 ContainerList 类的代码:

#include "MemoryContainer.cpp"
struct ContainerListItem{
int index = 0;
MemoryContainer item;
ContainerListItem* nextItem;
ContainerListItem(byte none) {}
};
class ContainerList{
public:
int getSize() {return size;}
void addContainer(MemoryContainer item){
ContainerListItem indexItem = ContainerListItem(1);
indexItem.item = item;
indexItem.index = size - 1;
indexItem.nextItem = &firstItem;
firstItem = indexItem;
size++;
}
MemoryContainer getContainer(int index){
ContainerListItem currentItem = ContainerListItem(1);
currentItem = firstItem;
while(currentItem.index != index)
currentItem = *currentItem.nextItem;
return currentItem.item;
}
private:
int size = 1;
ContainerListItem firstItem = ContainerListItem(1);
};

定义的构造函数的完整错误:

In file included from Main.cpp:1:
ContainerList.cpp: In constructor ‘ContainerListItem::ContainerListItem(uint8_t)’:
ContainerList.cpp:7:34: error: no matching function for call to ‘MemoryContainer::MemoryContainer()’
ContainerListItem(byte none) {}
^
In file included from ContainerList.cpp:1,
from Main.cpp:1:
MemoryContainer.cpp:24:5: note: candidate: ‘MemoryContainer::MemoryContainer(uint64_t, std::__cxx11::string)’
MemoryContainer(lint ContainerSize, string name){
^~~~~~~~~~~~~~~
MemoryContainer.cpp:24:5: note:   candidate expects 2 arguments, 0 provided
MemoryContainer.cpp:17:7: note: candidate: ‘MemoryContainer::MemoryContainer(const MemoryContainer&)’
class MemoryContainer{
^~~~~~~~~~~~~~~
MemoryContainer.cpp:17:7: note:   candidate expects 1 argument, 0 provided
MemoryContainer.cpp:17:7: note: candidate: ‘MemoryContainer::MemoryContainer(MemoryContainer&&)’
MemoryContainer.cpp:17:7: note:   candidate expects 1 argument, 0 provided

您的ContainerListItem类有一个成员,该成员是另一个类:

MemoryContainer item;

但是,构造函数根本不初始化它:

ContainerListItem(byte none) {}

构造函数大部分为空。

类的所有成员都必须由其构造函数初始化。如果构造函数未显式初始化类成员,则它必须具有初始化它的默认构造函数。默认构造函数是不带参数的构造函数。

您没有显示MemoryContainer类的声明,但它必须具有至少接受一个参数的构造函数(实际上可能还有其他一些原因,但这是最有可能的原因)。

这意味着ContainerListItem必须通过构造类成员来显式初始化类成员,或者必须向MemoryContainer添加默认构造函数。

这正是编译器告诉您的,如果您仔细阅读其错误消息:

错误:调用没有匹配函数 'MemoryContainer::MemoryContainer()'

编译器告诉您此类的默认构造函数不存在。由于ContainerListItem不显式初始化此类成员,因此必须调用其默认构造函数。但它没有声明。

您将在C++书中找到有关初始化类成员的不同方法的更多信息。但是,例如,如果MemoryContainer的唯一构造函数采用一个int参数,并且您希望初始化它,在这种情况下,通过使用 0 调用其构造函数,则您的ContainerListItem构造函数将读取(使用现代C++统一的初始化语法):

ContainerListItem(byte none) : item{0} {}

你需要弄清楚你是要实现MemoryContainer的默认构造函数,还是如何在这里初始化它。没有人能为你弄清楚,这是一个只有你能做出的决定。

相关内容

  • 没有找到相关文章

最新更新