模板堆栈不会初始化(无输出)

时间:2016-10-26 12:55:49

标签: c++ templates stack

我尝试编写一个使用节点存储数据的堆栈,我尝试将其与模板一起使用,以便存储的数据可以是不同的数据类型。我正在使用它与堆栈,所以节点可以移动或删除,但我已经初始化堆栈,我试图通过couting文本接收反馈,以确保一切正常,但事实并非如此。

没有反馈给模板,并且Visual Studios 2013中没有错误。如果有人可以看一看并解释为什么那会很棒。此外,如果有人有更多关于使用'通用编程'允许多种非常有用的数据类型。下面是以两个标题和一个主要cpp分隔的代码。

template <class T>
class Node {
public:
    T    data;
    Node * next;
    Node * start;
    Node(T inputdata){
        data = inputdata;
    }
    T getData() {
        return data;
    }
};



#include "node.h"
using namespace std;

template<typename DT>
class Stack{
private:
    int size;
    Node<DT> *top;
    Node<DT> *s_ptr;

public:
    Stack();
    void push(DT val);
    DT pop();
    void start();
};

template<typename DT>
Stack<DT>::Stack()
{
    cout << "Stack Started" << endl;
}

template<typename DT>
void Stack<DT>::push(DT val)
{

}

template<typename DT>
DT Stack<DT>::pop()
{

}

template<typename DT>
void Stack<DT>::start()
{
    cout << "Started" << endl;
}




#include "stdafx.h"
#include <iostream>
#include "stack.h"

template <typename DT>
void start(){
    Stack<DT> * stack = new Stack<DT>();
    stack->start();
}
int _tmain(int argc, _TCHAR* argv[])
{
    void start();
    system("pause");
    return 0;
}

我认为它之所以没有成功,是因为在主要类中它表示在main应该只是start()时void开始。但是,如果我删除,我得到没有功能模板启动的实例匹配模板列表。有人在意解释?

1 个答案:

答案 0 :(得分:5)

  

我认为它之所以没有成功,是因为在主要类中它表示在main应该只是start()时void开始。

正确。 void start();没有调用函数,它声明了一个函数,所以你所做的就是声明一些东西,而不是运行任何代码。

  

但是,如果我删除了我得到的函数模板启动实例没有匹配模板列表。

您将start声明为采用单个模板参数的函数模板,因此start()不是函数,而是模板。编译器应该如何知道模板参数应该是什么?

您需要执行以下操作:

start<int>();