简体   繁体   中英

Return struct in class template function

I'm learning C++ with some exercises from a book that I found a while ago. My task is described below and I've tried to find a work around for returning a template node I created for the template function getLastNode to add a node at the end of the list. Is it possible to do that, currently I can't find a way to let's call it explain the compiler what TNode is as a struct within a class return value.

I might have the best way to declare nodes in this code. Perhaps, a struct within a class can complicate class template methods implementations. Do you feel there's another strategy? Please let me know

Cheers!

/* Implement the data structure dynamic doubly linked list (DoublyLinkedList<T>) - list,
 * the elements of which have pointers both to the next and the previous elements. Implement 
 * the operations for adding, removing and searching for an element, as well as inserting
 * an element at a given index, retrieving an element by a given index and a method, which returns an array with the elements of the list*/

#include <iostream>

template<typename TValue>
class List{
  struct TNode{
    TValue value;
    TNode *previous;
    TNode *next;
  }Node;
  public:

    List();
    ~List();
    void addNode(TValue); 
  private:
    TNode *root;
    TNode getLastNode(TNode);
};

template<typename TValue>
List<TValue>::List():root(0) {}

template<typename TValue>
List<TValue>::~List<TValue>(){
}

template<typename TValue>
TNode List<TValue>::getLastNode(TNode node){
  if(node.next==nullptr) 
    return node;
  else
   getLastNode(node.next);
}

template<typename TValue>
void List<TValue>::addNode(TValue value){
  const TNode last = getLastNode(root);
  last.next = Node;
  last.next->value = value;
}

int main(){
  List<int> test;

  return 0;
}

To return TNode for the getLastNode method I had to add auto to its class method declaration.

Credits: @JaMiT

template<typename TValue>
auto List<TValue>::getLastNode(TNode node){
  if(node.next==nullptr)
    return node;
  else
    getLastNode(node.next);
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM