【发布时间】:2020-03-24 23:52:03
【问题描述】:
我看到过与此类似的问题,但没有一个对我有帮助,因为我找不到使用模板的问题。 对于家庭作业,我必须编写一个可用于任何类型变量的堆栈,因此我决定使用模板。这阻止了我初始化变量,我的代码给了我一个关于函数 pop() 的警告,谁能给我关于如何删除此类警告的建议?
我的函数 pop():
template<typename T>
T stack<T>::pop(){
T result;
if(!empty()){
result = tos->data;
Node<T> *tmp = tos;
tos = tos->next;
delete tmp;
}else{
std::cerr<<"ERROR empty stack"<<std::endl;
}
return result;
}
【问题讨论】:
-
提示:不要删除警告。 改为修复错误
-
在使用之前将
result初始化为一个值。在没有初始化的情况下,根据T的类型,T result的定义可以使T未初始化——例如,如果T是int。如果!empty()不正确,则到达else,而result未初始化。return result然后将具有未定义的行为(因为它访问未初始化变量的值)。 -
我不相信初始化 T 因为没有我可以预测的类型,我必须同时使用我们实现的字符串类和 int 用于该项目的未来部分。我想不出一种初始化它的方法,所以它对他们俩都有效。据我所知,我的字符串类将被初始化为我的默认构造函数的规范,而 int 将被初始化。