繁体   English   中英

错误:无法忽略void值,因为它应该是

[英]error: void value not ignored as it ought to be

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 be

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

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

这是因为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; 
}

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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