我用 C++ 创建了一个项目,我需要一些方法在我的类中是虚拟的。所以当我在我的 main.cpp 中包含“类”.h 时,编译器说 undefined reference 我的方法,当我改变“class".h 到 "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”是编译的吗?
关于C++ 方法的多重定义或 undefined reference ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50489565/