关于多态性和常量的错误
Error regarding polymorphism and const
class AdjacencyList : public Graph{
private:
std::vector<Edge> edges;
public:
AdjacencyList();
void add_edge(const Edge& e){
edges.push_back(e);
}
void print(){
for(int i = 0;i<edges.size() ; i++){
std::cout << "(" << edges[i] << ")";
}
}
};
我遇到的问题是它给了我以下错误:
/tmp/ccqBzTGI.o: In function `main':
test.cpp:(.text+0x3d): undefined reference to `AdjacencyList::AdjacencyList()'
/tmp/ccqBzTGI.o: In function `Graph::Graph()':
test.cpp:(.text._ZN5GraphC2Ev[_ZN5GraphC5Ev]+0xf): undefined reference to `vtable for Graph'
/tmp/ccqBzTGI.o:(.rodata._ZTI15AdjacencyMatrix[typeinfo for AdjacencyMatrix]+0x10): undefined reference to `typeinfo for Graph'
/tmp/ccqBzTGI.o:(.rodata._ZTI13AdjacencyList[typeinfo for AdjacencyList]+0x10): undefined reference to `typeinfo for Graph'
collect2: ld returned 1 exit status
我什至不确定如何处理这个问题。
编辑:我是个傻瓜,忘了定义我写的构造函数。
class AdjacencyList : public Graph{
private:
std::vector<Edge> edges;
public:
AdjacencyList();
void add_edge(const Edge& e){
int i,j;
edges.push_back(e);
}
void print(){
for(int i = 0;i<edges.size() ; i++){
std::cout << "(" << edges[i] << ")";
}
}
您已经声明了默认构造函数 AdjacencyList((,但尚未为其提供主体定义。
查找缺少的构造函数和缺少的成员函数,就像错误消息所说的那样。在这种情况下,错误消息可能不是 100% 清楚的,但是,相信我,与典型的C++错误消息相比,这些错误消息在清晰度方面比平均水平要好。始终尝试找出并理解编译器的错误消息。随着时间和练习,您应该不会花很长时间才能理解其中的大多数。
您声明了
AdjacencyList();
构造 函数。你显然没有在任何地方定义它。
您声明了整个类:
class Graph{
public:
virtual void add_edge(const Edge& e);
virtual void print();
friend std::ostream& operator<<(std::ostream& os, const Edge& obj);
};
显然,您没有定义它的任何方法。如果这应该是一个抽象接口类,则应将这些方法定义为纯虚拟方法。
相关文章:
- 为什么static_assert错误:即使我传递常量"expression must have a constant value"?
- NVCC 错误:string_view.h:constexpr 函数返回是非常量
- 错误:请求从"常量字符 [5]"转换为非标量类型"字符串"
- 将错误作为从字符串常量到"char*"的已弃用转换 [-Wwrite-strings]
- 错误:constexpr 变量'struct2Var'必须由常量表达式初始化
- 如何在常量计算表达式中获取编译时错误?
- 为什么定义复制构造函数会给我错误:无法将类型 'obj&' 的非常量左值引用绑定到类型为"obj"的右值?
- C++ 中常量属性的初始化构造函数错误
- 为什么我总是收到此错误:从类型为"农场动物"的右值初始化类型的非常量引用无效|
- 为什么在第二类中使用静态常量会在第一类中给出编译器错误?
- 包含常量变量并包含在多个文件中的标头的链接错误
- C++2440错误-编译器认为字符串是常量字符
- 整体模板参数。错误:在常量表达式中使用'this'
- 常量更改而不const_cast<> 为什么没有编译器警告/错误?
- 语法错误"常量错误"
- 错误:常量类型为c++的单元化成员
- 错误:常量中的字符过多
- 错误:常量初始值设定项过多
- 缓冲区长度错误(常量字符 FAR*)
- C2059:语法错误:常量