c++ - C++ 方法的多重定义或未定义的引用
问题描述
我制作了一个 C++ 项目,我需要一些方法在我的类中是虚拟的。所以当我在 main.cpp 中包含“class”.h 时,编译器会说未定义对我的方法的引用以及当我更改“class”时。 h to "class".cpp 它说首先在 main.o 中定义,在 class.cpp 中定义多个
class Avl {
public:
Avlnode* insert(unsigned int key , Avlnode *root);
AvlofAvlnodes* insert(unsigned int key, unsigned int neighbors[],int size, AvlofAvlnodes *id );
template <typename nodeptr>
bool findElement(unsigned int element, nodeptr* root);
bool findConecion(unsigned int id, unsigned int neighbor,AvlofAvlnodes* root);
Avlnode* deletion(Avlnode* root,unsigned int key );
void deletion(unsigned int key , unsigned int neighbor,AvlofAvlnodes* root);
// methods to help avl
template <typename nodeptr>
nodeptr* rightRotate(nodeptr* root);
template <typename nodeptr>
nodeptr* leftRotate(nodeptr* root);
int max(int a,int b);
template <typename nodeptr>
int height(nodeptr* root);
template <typename nodeptr>
int getBalance(nodeptr* root);
template <typename nodeptr>
nodeptr* minValueNode(nodeptr* root);
template <typename nodeptr>
void preOrder(nodeptr* node);
};
解决方案
您总是包含“class.h”,而不是“class.cpp”。这是因为#include
在编译阶段处理,而不同的 .cpp 文件在链接阶段拼凑在一起。更准确地说,每个 .cpp 文件都被翻译成一个目标文件,然后将它们链接起来。
您缺少的虚拟方法是缺少目标文件的结果。我们知道 main.cpp 是,但是“class.cpp”是编译的吗?
推荐阅读
- python - 为所有对角线创建一个 NxN 数组
- java - 较新的 PDFBox 版本加载 PDF 缓慢
- php - 如何使用具有相同键但多个值的http post将数据发送到php文件api?
- php - 在一行中显示与相同ID相关的数据php laravel
- html - CSS背景图像不显示
- scala - HDFS 文件拆分命令:使用 spark-submit 的 Spark/Scala
- javascript - 使用javascript将html表格转换为csv时如何合并或组合单元格
- c# - 如何防止使用 ListBox 中的箭头在项目之间切换?
- javascript - 使反应组件可点击
- qt - Qt:如何删除白线?