簡體   English   中英

對基類構造函數的未定義引用

[英]Undefined Reference to Base Class Constructor

這是我的雙向鏈表的實現代碼,它從單個鏈表繼承了以前的代碼,我目前遇到了鏈接器錯誤的問題,過去一個小時在網上沖浪尋找我的問題的答案,但一無所獲遠幫我。 這是我最后的資源 誰能幫忙?

具體來說,當我嘗試使用 g++ 鏈接我的 .o 文件時出現的錯誤是:

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

我發現提出了非常相似的問題,但沒有一個答案對我有幫助,或者至少我不知道如何在我的代碼中具體實現它們,任何幫助都會得到認可。

我的鏈表類

#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

我的 LinkedList 類定義

#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;
}

我的雙重列表類

#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 行,這是從以前的試驗中鏈接 .o 文件。 我用來調用鏈接器的命令是

g++ -g main2.cpp DoublyList.o

其中 main2.cpp 是包含我測試代碼的 main 函數的代碼。

感謝 xskxzr,解決方案是將 LinkedList.o 與所有其余的 .o 文件一起鏈接。 如果有人遇到同樣的問題,這就是答案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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