Ich versuche, einen einfachen Stapel mit Template-Klassen zu erstellen. Es scheint ein Problem zu geben, wenn eine Klasse den Konstruktor der anderen Klasse aufruft.Problem mit verschachtelten Template-Klassen
#include <iostream>
#include <vector>
int g_MaxSize = 100;
template <class T>
class Stack;
template <class D>
class Node
{
private:
D data;
public:
Node(D value): data(value)
{
}
template <class T>
friend class Stack;
};
template <class T>
class Stack
{
private:
std::vector<Node<T>> stack;
int top;
public:
Stack(): stack(g_MaxSize), top(0)
{
}
void push(T val)
{
// make sure stack isnt full
stack[top++]= Node<T>(val);
}
Node<T> pop()
{
return stack[top--];
}
Node<T> peek()
{
return stack[top];
}
};
int main() {
Node<int> testNode(1) // *this works*
Stack<int> myStack;
myStack.push(3);
return 0;
}
Der Fehler ist "Kein übereinstimmender Konstruktor für die Initialisierung von 'Node'". Wie im obigen Code gezeigt, funktioniert der Node-Konstruktor eigenständig, funktioniert jedoch nicht, wenn er über die Stack-Klasse ausgeführt wird.
Ich sehe den Zweck von 'Node' in diesem überhaupt nicht. Warum speichern Sie nicht einfach "T" in Ihrem Vektor ?. – WhozCraig
Ja. Ich habe gerade ein Basisbeispiel gemacht, aber ich dachte, es wäre das Beste, es so zu machen, dass es einfach ist, den Knoten zu erweitern, wenn ich mehr Funktionalität für jeden Knoten haben möchte. – ascar