C++ 调用'Nodo::Nodo()'没有匹配功能
C++ No matching function for call to 'Nodo::Nodo()'
早上好。
我正在尝试在 c++ 中实现一个图形,其中节点和边缘被记忆为列表。我是意大利人,所以:graph/Grafo,edge/Arco ,node/Nodo ,listEdges/ListaArchi,listNodes/ListaNodi。
这是我的代码:
格拉福·
#ifndef GRAFO_H_
#define GRAFO_H_
#include "ListaNodi.h"
class Grafo {
public:
Grafo();
virtual ~Grafo();
void leggiGrafo(std::string nomeFile);
void aggiungiNodo(std::string nomeNodo);
private:
std::string nomeGrafo;
ListaNodi nodi;
};
#endif /* GRAFO_H_ */
格拉福.cpp
#include "Grafo.h"
Grafo::Grafo() {
}
Grafo::~Grafo() {
}
void Grafo::aggiungiNodo(std::string nomeNodo) {
}
void Grafo::leggiGrafo(std::string nomeFile){
}
阿科·
#ifndef ARCO_H_
#define ARCO_H_
#include <string>
#include "Nodo.h"
class Arco {
public:
Arco();
virtual ~Arco();
Arco *next;
std::string style;
std::string color;
private:
Nodo primo;
Nodo secondo;
};
#endif /* ARCO_H_ */
Arco.cpp(这是问题所在:
Arco.cpp:10:12:错误:调用"Nodo::Nodo(("没有匹配函数
#include "Arco.h"
Arco::Arco() {
// TODO Auto-generated constructor stub
next = NULL;
}
Arco::~Arco() {
// TODO Auto-generated destructor stub
}
诺多·
这里的其他问题:
Nodo.h:15:2:错误:成员"Nodo"上的额外限定"Nodo::"[-允许]
#ifndef NODO_H_
#define NODO_H_
#include <string>
#include "ListaArchi.h"
class Nodo {
public:
Nodo::Nodo(std::string nome);
virtual ~Nodo();
void setColore(std::string colore);
ListaArchi listaArchi;
Nodo *next;
private:
std::string colore;
std::string nome;
std::string label;
};
#endif /* NODO_H_ */
诺多.cpp
#include "Nodo.h"
#include <string>
Nodo::Nodo(std::string nome) {
this->nome = nome;
this->colore = "white";
next=NULL;
}
Nodo::~Nodo() {
}
阿科·
这里的其他问题:
ListaArchi.h:16:2:错误:"Arco"未命名类型
#ifndef LISTAARCHI_H_
#define LISTAARCHI_H_
#include "Arco.h"
class ListaArchi {
public:
ListaArchi();
virtual ~ListaArchi();
Arco arco;
};
#endif /* LISTAARCHI_H_ */
利斯塔阿奇.cpp
#include "ListaArchi.h"
ListaArchi::ListaArchi() {
}
ListaArchi::~ListaArchi() {
}
ListaNodi.h
#ifndef LISTANODI_H_
#define LISTANODI_H_
#include "Nodo.h"
class ListaNodi {
public:
ListaNodi();
virtual ~ListaNodi();
Nodo nodo;
};
#endif /* LISTANODI_H_ */
利斯塔诺迪.cpp
#include "ListaNodi.h"
ListaNodi::ListaNodi() {
nodo = NULL;
}
ListaNodi::~ListaNodi() {
}
谁能帮我解决这些问题?
您有多个问题。一个是在你的ListaNodi
类中使用Nodi
类来声明一个对象nodo
。这将使用 Nodi
的默认构造函数,但您尚未声明或定义一个。只有一个接受字符串的构造函数。
上述简单的解决方案是创建一个Nodi
默认构造函数,即不带参数的构造函数。
另一个问题是在ListaNodi
构造函数实现中,你这样做
nodo = NULL;
在这里,您将nodo
视为指针,但事实并非如此。解决方案是删除该行,改用构造函数初始值设定项列表:
ListaNodi::ListaNodi()
: nodo{}
{
}
当然,这需要您通过创建默认构造函数来解决上述第一个问题。
此外,在 Nodo
的类定义中,您使用作用域声明(非默认(构造函数,这是不需要的。
平原
Nodo(std::string nome);
是你所需要的一切。
最后,您遇到了循环头文件依赖项的问题,其中ListaArchi
取决于Arco
取决于Nodo
取决于ListaArchi
。你需要找到一种方法来打破头文件依赖循环。打破这种循环的最简单方法是在某处使用指针,并转发声明类型,而不是包含头文件。
看起来您正在制作列表,这意味着您可以通过使列表类中的"节点"成为指针来非常轻松地打破头文件循环依赖关系,它们可能从一开始就应该如此。这实际上也将解决我提到的前两个问题。
然后ListaArchi.h
头文件可能如下所示:
#ifndef LISTAARCHI_H_
#define LISTAARCHI_H_
class Arco; // Forward declaration instead of header file inclusion
class ListaArchi {
public:
ListaArchi();
virtual ~ListaArchi();
Arco* arco; // Declares as a pointer
};
#endif /* LISTAARCHI_H_ */
ListaNode.h
应该看起来像
#ifndef LISTANODI_H_
#define LISTANODI_H_
class Nodo; // Forward declaration instead of header file inclusion
class ListaNodi {
public:
ListaNodi();
virtual ~ListaNodi();
Nodo* nodo; // Declare as a pointer
};
#endif /* LISTANODI_H_ */
最后,您的ListaNodi
构造函数对NULL
赋值更有意义,但我建议您仍然使用构造初始值设定项列表:
ListaNodi::ListaNodi()
: nodo{nullptr}
{
}
- 在执行其他功能的同时播放动画(LED矩阵和Arduino/ESP8266)
- 多态性和功能结合
- 带内存和隔离功能的SQLite
- 在CMakeLists.txt的安装功能中使用.cmake文件有什么用
- 类模板的成员功能的定义在单独的TU中完全专业化
- 有没有一种方法可以创建一个带有哈希表的数据库,该哈希表具有恒定时间查找功能
- 如何在C++中获得"静态纯虚拟"功能?
- 两个文件使用彼此的功能-如何解决
- 我应该实现右值推送功能吗?我应该使用std::move吗
- QML按钮点击功能执行顺序
- 无法理解此 return 语句的功能,没有它就会发生运行时错误
- 有没有可能有一个只有ADL才能找到的非好友功能
- 功能样式转换从 'int' 到 'ItemType' 的匹配转换
- 文件系统:复制功能的速度秘诀是什么
- 在用于格式4的arm模拟器中实现功能时的一个问题
- 如何在Directwrite中获得给定字体的可用OpenType功能
- 对可变参数使用声明.如何选择正确的功能
- 询问在设计我的手臂模拟器功能表示格式1
- 功能原型的目的
- C++ 调用'Nodo::Nodo()'没有匹配功能