Ich versuche, meine eigene Vorlage für eine List-Klasse als Lernübung zu erstellen. Ich habe allerdings einige Probleme mit Template-Syntax wurde und ich bin jetzt die folgende Fehlermeldung zu erhalten ..Fehler: Template-Argument für 'struct List' erforderlich
main.cpp|Line 8|instantiated from here
error: template argument required for 'struct List'
In function 'int main()':
...
Soweit ich sagen kann ich nichts zu mißbrauchen bin aber dies ist mein erstes Mal der Arbeit mit Vorlagen und würde wirklich jemanden schätzen, der durchschaut und mich wissen lässt, was ich falsch mache.
List.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
Node.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;
}
Ah Danke wäre es mir im Alter, um das herauszufinden genommen hat. Könnten Sie bitte auf Ihren dritten Punkt eingehen? Vielleicht in meinen Code einfügen? Klingt frech, aber ich habe Probleme, es kompilieren zu lassen. Wenn ich den letzten Codeabschnitt außerhalb der Node-Deklaration verwende, ist die "friend" -Syntax nicht gut, wenn ich sie in die Node-Klasse lege, steht "List ist keine Vorlage" in Bezug auf die Zeile 'friend class List; '. Sind Sie auch sicher, dass der Typenname oben korrekt ist? Ich überprüfe einfach, wie ich schon sagte, dass ich die Template-Syntax noch nicht wirklich kenne. Wirklich zu schätzen die Antwort! –
Holly
Tell eine Lüge, war tatsächlich in der Lage, es zur Arbeit nur durch die erste Änderung oben genannten 'template Freund Klasse Liste;' .. etwas mehr Informationen über den letzten Teil des Beitrags kümmern, mit dem ich Probleme hatte, aber ansonsten funktioniert mein Programm wie gewünscht :) Danke !! –
Holly