未定义对基础 Class 构造函数的引用

Undefined Reference to Base Class Constructor

这是我实现双重 linked 列表的代码,它从单个 linked 列表继承了以前的代码,我目前在使用 linker 时遇到问题错误并在过去的一个小时内上网寻找我的问题的答案,但到目前为止没有找到任何可以帮助我的东西。这是我最后的办法了,有人能帮忙吗?

具体来说,当我尝试使用 g++ 处理 link 我的 .o 文件时出现的错误是:

DoublyList.o:DoublyList.cpp:(.text+0xf): undefined reference to 
`LinkedList::LinkedList()'
collect2.exe: error: ld returned 1 exit status

我发现了非常相似的问题,但 none 的答案对我有帮助,或者至少我不知道如何在我的代码中具体实现它们,我们将不胜感激。

我的链表class

#ifndef LINKEDLIST_H
#define LINKEDLIST_H

using namespace std;


struct node
    {
        float value;
        node *next;

    };

class LinkedList
{


private:
    node *first;
public:
    LinkedList();
    virtual void insert(float val);
    virtual void del(float val);
    virtual void read();
    virtual int search(float val);


};

#endif

我的链表class定义

#include <iostream>
#include "LinkedList.h"

using namespace std;


LinkedList::LinkedList()
{
    this->first = NULL;
}


void LinkedList::insert(float val)
{

    if(this->first==NULL or this->first->value >= val)
    {
        node* a_node = new node();
        a_node->value = val;
        this->first = a_node;
        return;
    }
    node* n = new node();
    n = this->first;
    node* new_node = new node();
    new_node->value = val;
    while(n->next != NULL and n->next->value < new_node->value)
    {
        n = n->next;
    }
    new_node->next = n->next;
    n->next = new_node;

}


void LinkedList::del(float val)
{
    node* n = this->first;
    node* prev = new node();
    prev = n;//in case if it is the first value
    int i = this->search(val);
    if(this->first->value == val)
    {
        this->first = this->first->next;
        return;
    }

    if(i != -1)
    {
        for(int j = 0; j < i; j++)
        {
            prev = n;
            n = n->next;
        }
    }
    //one last check
    if(n->value == val)
    {
        prev->next = n->next;
    }

}


void LinkedList::read()
{
    node* n = this->first;
    int i = 1;
    while(n != NULL)
    {
        cout << i << ". " << n->value << endl;
        n = n->next;
        i++;
    }
}


int LinkedList::search(float val)
{
    int i = 0;
    node* n = this->first;
    while(n != NULL)
    {
        if(n->value == val)
            return i;
        else
        {
            n = n->next;
            i++;    
        }
    }
    return -1;
}

我的双重名单class

#ifndef DOUBLYLIST_H
#define DOUBLYLIST_H

#include "LinkedList.h"

class DoublyList: public LinkedList
{
public:
    struct node
    {
        float value;
        node * next;
        node * prev;
    };
    node * first;
    DoublyList();
    void insert(float val);
    void del(float val);
    void read();
    int search(float val);

};


#endif

我的双重列表定义

 #include <cstddef>
    #include "DoublyList.h"
    #include "LinkedList.h"

    using namespace std;

    //constructor
    DoublyList::DoublyList()
    {
        first = NULL;
    }
    //Insert a node into the correct position in the doubly linked list
    void DoublyList::insert(float val)
    {
    //if linked list is empty or val <= the first node
    if(this->first == NULL or this->first->value >= val)
    {
        node * a_node = new node();
        a_node->value = val;//set node's value
        //begin replacing and assigning pointers
        a_node->next = this->first;
        a_node->prev = NULL;
        this->first = a_node;

        return;
    }
    node * n = new node();
    n = this->first;
    node * new_node = new node();
    new_node->value = val;
    node * prev_node = new node();
    while(n->next != NULL and n->next->value < new_node->value)
    {
        prev_node = n;
        n = n->next;
    }
    prev_node->next = new_node;
    new_node->next = n->next;
    new_node->prev = prev_node;
    n->next = new_node;
    }

    void DoublyList::del(float val)
    {
    node * n = this->first;
    int i = this->search(val);
    //if first node
    if(this->first->value == val)
    {
        this->first = this->first->next;
        this->first->prev = NULL;
        return;
    }
    //if value found
    if(i != -1)
    {
        for(int j = 0; j < i; j++)
        {
            n = n->next;
        }
        //if a middle node
        if(n->value == val and n->next != NULL)
        {
            n->prev->next = n->next;
            return;
        }
        //if last node
        if(n->prev != NULL)
        {
            n->prev->next = n->next;
        }
    }
    return;//value not found so return
    }

void DoublyList::read() {   }
int DoublyList::search(float val) { }

编辑:忘记提及此错误具体发生在 DoublyList.cpp 的第 8 行,这是从以前的试验到 link .o 文件。 我用来调用 linker 的命令是

g++ -g main2.cpp DoublyList.o

其中 main2.cpp 是包含我测试代码的主要功能的代码。

感谢 xskxzr,解决方案也是 link LinkedList.o 以及所有其他 .o 文件。如果有人遇到同样的问题,这就是答案。