C++ 删除警告:";变量';结果';每当';如果';“条件为假”;在c++;
我见过类似的问题,但没有一个对我有帮助,因为我找不到一个使用模板的问题。 对于家庭作业,我必须编写一个可以与任何类型的变量一起使用的堆栈,因此我决定使用一个模板。这就阻止了我初始化变量,我的代码给了我一个函数pop()的警告,有人能给我一些关于如何删除此类警告的建议吗 我的函数pop():C++ 删除警告:";变量';结果';每当';如果';“条件为假”;在c++;,c++,templates,stack,C++,Templates,Stack,我见过类似的问题,但没有一个对我有帮助,因为我找不到一个使用模板的问题。 对于家庭作业,我必须编写一个可以与任何类型的变量一起使用的堆栈,因此我决定使用一个模板。这就阻止了我初始化变量,我的代码给了我一个函数pop()的警告,有人能给我一些关于如何删除此类警告的建议吗 我的函数pop(): 模板 T stack::pop(){ T结果; 如果(!empty()){ 结果=tos->数据; 节点*tmp=tos; tos=tos->next; 删除tmp; }否则{ std::cerr而不是简单地
模板
T stack::pop(){
T结果;
如果(!empty()){
结果=tos->数据;
节点*tmp=tos;
tos=tos->next;
删除tmp;
}否则{
std::cerr而不是简单地打印到std::cerr
您的pop()
方法如果遇到无法处理的问题,应该引发异常。静默失败并返回未初始化的对象将在以后引起问题
您可以引发如下异常:
/。。。
否则{
抛出std::运行时_错误(“错误空堆栈”);
}
//...
然后,您只需在if语句的true
分支中声明result
。提示:不要删除警告。请先修复错误,然后将result
初始化为一个值,然后再使用它。没有初始化,根据类型T
,定义T result
可以离开T
未初始化-例如,如果T
是int
。如果!empty()
不是true,则到达else
,使结果未初始化。返回结果将具有未定义的行为(因为它访问未初始化变量的值)。我不相信初始化t是可能的,因为没有我可以预测的类型,我必须在这个项目的未来部分同时使用我们实现的string类和int。我想不出一种方法来初始化它,这样它就可以对这两个类都起作用。据我所知,我的string类将被初始化为默认构造函数的规范,而int将被单位化。值得注意的是,我们选择了单独的get_back
和pop_back
方法,因为pop
在空的情况下以一种有用的方式处理可能有点棘手。现在可能会抛出一个异常或返回一个异常!谢谢!我的教授最后也回答了我的问题上周我发了一封电子邮件,显然我可以在从堆栈中弹出元素之前使用断言(!empty()),不过我会使用这个,因为它看起来更整洁。
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;
}