这是一个与其他人类似的问题,但是我已经检查了将其标记为重复的内容,并且一般回答对我没有帮助,因为我要么不理解它们,要么它们与我的问题无关。我需要帮助和/或专门解决此问题的解决方案。请,谢谢。我正在构建一种"编程语言"(但它不是真的,只是不知道如何描述它),在我的 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
的默认构造函数,还是如何在这里初始化它。没有人能为你弄清楚,这是一个只有你能做出的决定。