template <typename Z> Z myTemplate <Z> :: popFromVector ()
{
if (myVector.empty () == false)
return myVector.pop_back ();
return 0;
}
int main ()
{
myTemplate <int> obj;
std :: cout << obj.popFromVector();
return 0;
}错误:
error: void value not ignored as it ought to beAFAI可以看到,popFromVector的返回类型不是空的。我漏掉了什么要点?当我在main()中注释掉这个调用时,错误消失了。
发布于 2011-09-05 20:10:36
std::vector<T>::pop_back()返回空值。您尝试将其作为int返回。这是不允许的。
发布于 2011-09-05 20:17:14
这是因为std::vector::pop_back的定义有一个void返回类型...您正试图从该方法返回一些内容,但这不会起作用,因为该方法不返回任何内容。
将您的函数更改为以下内容,这样您就可以返回其中的内容,并删除向量的后面:
template <typename Z> Z myTemplate <Z> :: popFromVector ()
{
//create a default Z-type object ... this should be a value you can easily
//recognize as a default null-type, such as 0, etc. depending on the type
Z temp = Z();
if (myVector.empty () == false)
{
temp = myVector.back();
myVector.pop_back();
return temp;
}
//don't return 0 since you can end-up with a template that
//has a non-integral type that won't work for the template return type
return temp;
}发布于 2011-09-05 20:11:05
是pop_back()。它有一个void返回类型。您必须使用back()来获取实际值。这是为了避免不必要的副本。
https://stackoverflow.com/questions/7307830
复制相似问题