簡體   English   中英

嵌套模板化類的問題

[英]Issue with nested templated classes

我正在嘗試使用模板化的類創建一個簡單的堆棧。 當一個類調用另一個類的構造函數時,似乎出現了問題。

#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'”。 如上面的代碼所示,Node構造函數可以單獨工作,但通過Stack類完成時則不能工作。

vector的參數需要默認的構造函數。 Node缺少一個,因此出錯。

在這里你的問題是stack(g_MaxSize)Stack(): stack(g_MaxSize), top(0)正在請求您構建g_MaxSize默認構造Node在矢量s。 但是,由於Node無法默認構造,因此您無法執行此操作。

您可以向Node添加默認的構造函數來解決該問題。 另一種方法是將默認Node傳遞給矢量構造函數,例如stack(g_MaxSize, Node<T>(1)) 最后,您可以創建大小為零的向量,然后在構造函數主體中調用reserve來為Node分配存儲,而無需構造它們。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM