[英]C++ multiple definition of methods or undefined reference
我對c ++進行了一個項目,我需要在類中使用一些虛擬方法。.因此,當我在main.cpp中包含“ class” .h時,編譯器會說未定義對我方法的引用,而當我更改“ 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”已編譯嗎?
僅包含hpp文件,然后需要將cpp文件添加到編譯器。 如果使用命令行,則應如下所示:
g++ main.cpp class.cpp -o a.out
如果您使用的是C ++ IDE,只要它是項目的一部分,它將編譯class.cpp文件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.