我想创建一个带有模板堆栈实现的字符串堆栈,但程序在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 ;
}
main中的代码是
Stack <string> Stack1(50);
我该如何解决这个问题?对不起,如果之前被问到,但我做了很多研究。感谢...
答案 0 :(得分:0)
new T(size)
生成一个元素,使用值size
初始化,如果无法使用int
值初始化类型,则会失败。
看起来你想创建一个数组;这是new T[size]
。
答案 1 :(得分:0)
嗯,我想你想分配多个字符串。您只分配一个字符串/对象。
new string(12)
正在调用std :: string构造函数,它不实现string(int)
如果你想分配多个字符串,你必须这样做:
new string[12]
或new T[size]
此外,您的类正在泄漏内存,因为您永远不会释放已分配的内存。
答案 2 :(得分:0)
您错误地使用以下指令为您的阵列分配内存:
s_ptr=new T(size);
实际上,这一行将使用构造函数T(int size)创建类型为T的单个新对象。 您收到的错误意味着编译器找不到任何接受int。
的String构造函数你真正需要的是为T类型的 size 元素分配内存。那就是:
s_ptr = new T[size];
这将正确创建指向一组字符串的指针。
PS:记得在Stack实现中添加一个析构函数,释放分配的内存。