error: template argument erforderlich "struct List'
Ich versuche, um meine eigene Vorlage für eine Liste, die Klasse als Lern-übung. Ich habe ein paar Probleme mit der template-syntax, obwohl, und ich bin jetzt immer folgende Fehlermeldung..
main.cpp|Line 8|instantiated from here
error: template argument required for 'struct List'
In function 'int main()':
...
Soweit ich sagen kann, ich bin nicht falsch nichts, aber das ist mein erstes mal arbeiten mit Vorlagen und würde wirklich zu schätzen, jemanden, der durch und lassen Sie mich wissen, was ich falsch mache.
Liste.hpp:
#if !defined _LIST_HPP_
#define _LIST_HPP_
#include "Node.hpp"
///since we're creating a template everything must be defined in the hpp
template <typename ListType>
class List
{
public:
List();
bool Empty();
void PushFront();
void PushBack();
void PopBack();
Node<ListType>& GetHead();
private:
int _size;
Node<ListType>* _head;
Node<ListType>* _tail;
};
///implement List class here
template <typename ListType>
List<ListType>::List() : _head(0), _tail(0), _size(0)
{
}
template <typename ListType>
bool List<ListType>::Empty()
{
return _size == 0;
}
template <typename ListType>
void List<ListType>::PushFront()
{
_head = new Node<ListType>( _head , 0 );
if (!Empty())
_head->_prev->_next = _head; //set previous nodes _next to new _head
++_size;
}
template <typename ListType>
void List<ListType>::PushBack()
{
_tail = new Node<ListType>( 0 , _tail);
if (!Empty())
_tail->_next->_prev = _tail; //set old tails _prev to new tail
++_size;
}
template <typename ListType>
void List<ListType>::PopBack()
{
}
template <typename ListType>
Node<ListType>& List<ListType>::GetHead()
{
return _head;
}
#endif //define
Knoten.hpp:
#if !defined _NODE_HPP_
#define _NODE_HPP_
template<typename NodeType>
class Node{
public:
Node( Node* prev = 0, Node* next = 0);
void SetData(NodeType newData);
void GetData();
private:
friend class List;
NodeType _data;
Node* _next;
Node* _prev;
};
///implement Node
template <typename NodeType>
Node<NodeType>::Node(Node* prev, Node* next) : _prev(prev), _next(next)
{}
template <typename NodeType>
void Node<NodeType>::SetData(NodeType newData)
{
_data = newData;
}
template <typename NodeType>
void Node<NodeType>::GetData()
{
return _data;
}
#endif //define
Main.hpp
#include <iostream>
#include "List.hpp"
int main()
{
List<int> testl;
//test
testl.PushFront();
testl.GetHead().SetData(7); //Error thrown here??
std::cout << test1.GetHead().GetData() << std::endl;
return 0;
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
List
ist eine Vorlage-Klasse, so müssen Sie deklarieren es als solche in Ihren Freund ErklärungWenn Sie nur wollen
List<NodeType>
ein Freund sein, Sie müssen ihm sagen das Vorlage-argument, also die Freund-Deklaration wirdFür diese Arbeit, es muss wissen, dass
List
existiert als eine Vorlage-Klasse, so müssen Sie die forward-deklarieren Sie es an der SpitzeNode.hpp
:friend class List<NodeType>;
. Auch sind Sie sicher, dass der typename ' s sind richtig vor? Nur die überprüfung, wie ich sagte, ich bin nicht wirklich vertraut mit der template-syntax noch nicht. Wirklich dankbar für die Antwort!template<typename ListType> friend class List;
.. würde nicht dagegen einige weitere Informationen auf dem letzten Teil der post, die ich hatte Probleme mit, aber sonst ist mein Programm wie gewünscht funktioniert 🙂 Danke!!