[英]Template Stack gives error when type is String
我想用模板堆栈实现创建一个字符串堆栈,但是程序在s_ptr = new T(size)时给出“从int到const char *的无效转换”错误; 线。
我的Stack.h
using namespace std;
template <class T>
class Stack{
private:
int size,top;
T *s_ptr;
public:
Stack(int);
void push(T val);
T pop();
bool isfull();
bool isempty();
};
template <class T>
Stack <T> :: Stack (int maxsize)
{
size=maxsize;
top=-1;
s_ptr=new T(size);
}
template <class T>
void Stack <T> :: push(T value){
if(!isfull()){
s_ptr[++top]=value;
}
else{
cout << "Stack is full";
}
}
template <class T>
T Stack <T> ::pop()
{
if(!isempty()){
return s_ptr[top--];
}
else{
cout << "Stack is empty";
}
}
template <class T>
bool Stack <T>::isfull(){
return top == size-1 ;
}
template <class T>
bool Stack <T>::isempty(){
return top ==-1 ;
}
主要的代码是
Stack <string> Stack1(50);
我怎么解决这个问题? 抱歉,如果之前有人问我,但我做了很多研究。 谢谢...
new T(size)
使得一个单一的元件,与该值初始化size
,未能如果类型不能与被初始化int
值。
好像您要创建一个数组; 那是new T[size]
。
好吧,我想您想分配多个字符串。 您仅分配一个字符串/对象。
new string(12)
正在调用std :: string构造函数,该构造函数未实现string(int)
如果要分配多个字符串,则必须执行以下操作:
new string[12]
或new T[size]
另外,您的类正在泄漏内存,因为您从不释放分配的内存。
您使用以下指令为数组错误地分配了内存:
s_ptr=new T(size);
实际上,此行将使用构造函数T(int size)创建一个类型T的新对象 。 您收到的错误意味着编译器找不到任何接受int的String构造函数。
您真正需要的是为T类型的size元素分配内存。
s_ptr = new T[size];
这将正确创建一个指向一组字符串的指针。
PS:请记住在您的Stack实现中添加一个析构函数,以释放分配的内存。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.