我创建了一个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);
};
答案 0 :(得分:1)
你总是包括&#34; class.h&#34;,永远不包括&#34; class.cpp&#34;。这是因为#include
在编译阶段处理,而不同的.cpp文件在链接阶段拼凑在一起。更准确地说,每个.cpp文件都被翻译成一个目标文件,然后将它们链接起来。
缺少的虚拟方法是缺少目标文件的结果。我们知道main.cpp是,但是&#34; class.cpp&#34;编译?
答案 1 :(得分:0)
仅包含hpp文件,然后需要将cpp文件添加到编译器。如果您使用命令行,它应如下所示:
g++ main.cpp class.cpp -o a.out
如果您使用的是C ++ IDE,只要它是项目的一部分,它就会编译class.cpp文件。