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

Use*_*261 0 c++ stack templates

我试图编写一个使用节点来存储数据的堆栈,我试图将它与模板一起使用,以便存储的数据可以是不同的数据类型.我正在使用它与堆栈,所以节点可以移动或删除但是我已经初始化堆栈,我试图通过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;
}
Run Code Online (Sandbox Code Playgroud)

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

Jon*_*ely 5

我认为它之所以没有初始化的原因是因为在主类中它表示void应该只是start()时在main中开始.

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

但是,如果我删除,我得到没有功能模板启动的实例匹配模板列表.

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

你需要做一些事情:

start<int>();
Run Code Online (Sandbox Code Playgroud)