【问题标题】:Why I'm getting " void value not ignored as it ought to be"? [duplicate]为什么我得到“不应忽略的无效值”? [复制]
【发布时间】:2020-02-12 07:47:42
【问题描述】:

我正在编写这个程序,但出现以下错误,请任何人帮助摆脱这种困境。(https://practice.geeksforgeeks.org/problems/array-of-alternate-ve-and-ve-nos/0).Or你们能解释一下我们在哪种情况下会出现这种错误。

#include <iostream>
#include<vector>
using namespace std;
int rearrange(int array[],int N)
{
    vector<int> vec1;
    vector<int> vec2;
    for(int i=0;i<N;i++)
    {
        if(array[i]<0)
        vec1.push_back(array[i]);
        else
        vec2.push_back(array[i]);
    }
    int size_vec1;
    int size_vec2;
    size_vec1=vec1.size();
    size_vec2=vec2.size();
    for(int j=0;j<N;j++)
    {   

        if(j/2==0 || size_vec2==0 )
        {
             array[j]=vec1.pop_back();
             size_vec1-=1;
        }
        else
        {
             array[j]=vec2.pop_back();
             size_vec2-=1;
        }

    }
}

void print_rearrangearray(int array[],int N)
{
    for(int i=0;i<N;i++)
    {
        cout<<array[i]<<" ";
    }
}
int main() {
    int T;
    cin>>T;
    for(int i=0;i<T;i++)
    {
        int N;
        cin>>N;
        int array[N];
        for(int i=0;i<N;i++)
           cin>>array[i];
       rearrange(array,N);
       print_rearrangearray(array,N); 

    }
    return 0;
}   

我收到以下错误。

prog.cpp: In function ‘int rearrange(int*, int)’:
prog.cpp:24:22: error: void value not ignored as it ought to be
              array[j]=vec1.pop_back();
                      ^
prog.cpp:29:22: error: void value not ignored as it ought to be
              array[j]=vec2.pop_back();

【问题讨论】:

  • 检测代码的确切行。然后编写一个显示问题的最小示例,而不是粘贴您的代码。这样,好心的读者可能会给你答案。

标签: c++ arrays


【解决方案1】:

std::vector::pop_back() 的返回类型为void,这意味着它不返回任何内容。

先获取值,再弹出:

array[j] = vec1.back(); // Get last item
vec1.pop_back(); // remove last item

vec2 也是如此。

【讨论】:

    【解决方案2】:

    您的代码 sn-p 表明您的问题可以简化为:

    #include<vector>
    
    int main()
    {
        std::vector<int> v{1,2,3};
        int i = v.pop_back();
        return 0;
    } 
    

    现在,如果您查看std::vector::pop_back(),您将看到pop_back() 的返回类型是void,因此您的错误。

    【讨论】:

    • 谢谢,我不知道 std::vector::pop_back() 的返回类型是无效的,感谢让我知道。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-08
    • 1970-01-01
    • 1970-01-01
    • 2013-08-04
    • 2012-12-06
    • 2021-08-21
    • 1970-01-01
    相关资源
    最近更新 更多