繁体   English   中英

类型为字符串时,模板堆栈给出错误

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM