簡體   English   中英

使用struct作為私有成員在鏈接列表類中定義ListNode

[英]Using struct as private member to define ListNode within link list class

我試圖用一個結構體作為我的私有成員實現LinkList類,但是,當我嘗試在LinkList.ccp下定義結構體ListNode時,編譯器表示未定義指針。 錯誤在高亮線上

#ifndef LINKLIST_H
#define LINKLIST_H

#include <iostream>
using namespace std;

template <typename T>
class LinkList{
private:
    struct ListNode{
        T item;
        ListNode * next;
    };
    int size; // the size of the listNodes.
    ListNode* _head;

public:
    LinkList(); // constructor
    void giveup(int n);
    bool isEmpty();
    int getLength();

    ListNode * find(int index);
};

#endif

#include "LinkList.h"

template <typename T>
LinkList<T>::LinkList(){
    _head = NULL;
    size = 0;
}

template <typename T>
void LinkList<T>::giveup(int n){
    cout << "The error " << n << " has occured" << endl;
}

template <typename T>
bool LinkList<T>::isEmpty(){
    return (size == 0);
}

template <typename T>
int LinkList<T>::getLength(){
    return size;
}

template <typename T>
***ListNode * LinkList<T>::find(int index){ // pointer not defined***
    if(index < 1 || index > size){
        return NULL;
    }
    ListNode * currentNode = _head;
    for(int pos =2; pos <=index; pos++){
        currentNode = currentNode->next;
    }
    return currentNode;
}

在類外的成員函數定義中,領先的返回類型不在類內,因此,如果它是嵌套類型,則必須對其進行限定:

template <typename T>
LinkList<T>::ListNode * LinkList<T>::find(int index)
^^^^^^^^^^^^^

參數列表和任何尾隨返回類型都在該類內,因此(在C ++ 11或更高版本中)您可以這樣寫:

template <typename T>
auto LinkList<T>::find(int index) -> ListNode *

一旦你已經修復了,然后,為了使用模板,你需要的函數定義移到頭文件,描述在這里

暫無
暫無

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

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