テンプレートクラスを使用して単純なスタックを作成しようとしています。あるクラスが他のクラスのコンストラクタを呼び出すときに問題があるようです。ネストされたテンプレートクラスの問題
#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;
}
「ノードの初期化には一致するコンストラクタがありません」というエラーがあります。上のコードに示されているように、Nodeコンストラクタは独自に動作しますが、Stackクラスを通して実行されても機能しません。ここ
私はこの中で 'Node'の目的を全く見ません。なぜあなたのベクトルに 'T'を格納しないのですか? – WhozCraig
うん。私はベースラインの例を行っていましたが、ノードごとに多くの機能を追加したい場合は、ノードを簡単に拡張できるように、このようにするのが最善であると考えました。 – ascar