我尝试编写一个使用节点存储数据的堆栈,我尝试将其与模板一起使用,以便存储的数据可以是不同的数据类型。我正在使用它与堆栈,所以节点可以移动或删除,但我已经初始化堆栈,我试图通过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开始。但是,如果我删除,我得到没有功能模板启动的实例匹配模板列表。有人在意解释?
答案 0 :(得分:5)
我认为它之所以没有成功,是因为在主要类中它表示在main应该只是start()时void开始。
正确。 void start();
没有调用函数,它声明了一个函数,所以你所做的就是声明一些东西,而不是运行任何代码。
但是,如果我删除了我得到的函数模板启动实例没有匹配模板列表。
您将start
声明为采用单个模板参数的函数模板,因此start()
不是函数,而是模板。编译器应该如何知道模板参数应该是什么?
您需要执行以下操作:
start<int>();