首页 > 解决方案 > 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);

};

标签: c++compiler-errors

解决方案


您总是包含“class.h”,而不是“class.cpp”。这是因为#include在编译阶段处理,而不同的 .cpp 文件在链接阶段拼凑在一起。更准确地说,每个 .cpp 文件都被翻译成一个目标文件,然后将它们链接起来。

您缺少的虚拟方法是缺少目标文件的结果。我们知道 main.cpp 是,但是“class.cpp”是编译的吗?


推荐阅读