簡體   English   中英

C ++方法的多個定義或未定義的引用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM