首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >错误:未按应忽略的方式忽略void值

错误:未按应忽略的方式忽略void值
EN

Stack Overflow用户
提问于 2011-09-05 20:06:31
回答 3查看 73.8K关注 0票数 21
代码语言:javascript
复制
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;
}

错误:

代码语言:javascript
复制
error: void value not ignored as it ought to be

AFAI可以看到,popFromVector的返回类型不是空的。我漏掉了什么要点?当我在main()中注释掉这个调用时,错误消失了。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-09-05 20:10:36

std::vector<T>::pop_back()返回空值。您尝试将其作为int返回。这是不允许的。

票数 17
EN

Stack Overflow用户

发布于 2011-09-05 20:17:14

这是因为std::vector::pop_back的定义有一个void返回类型...您正试图从该方法返回一些内容,但这不会起作用,因为该方法不返回任何内容。

将您的函数更改为以下内容,这样您就可以返回其中的内容,并删除向量的后面:

代码语言:javascript
复制
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; 
}
票数 8
EN

Stack Overflow用户

发布于 2011-09-05 20:11:05

pop_back()。它有一个void返回类型。您必须使用back()来获取实际值。这是为了避免不必要的副本。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7307830

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档