在函数内部创建两个std :: vector对象,并通过引用返回它们

Nic*_*nar 2 c++ function pass-by-reference

使用C++,我想创建一个vector对象的实例input,如main()下面的测试程序的功能所示.所述input载体中填充有数据,然后传递通过参考compute()功能.compute函数是返回两个向量对象realimag.

是否可以按照下面的代码片段中显示的方式返回这两个矢量对象?

使用编译此代码gcc会产生以下错误:

In function ‘void compute(const std::vector<double>&, std::vector<double>&, std::vector<double>&)’:
error: declaration of ‘std::vector<double> real’ shadows a parameter
error: declaration of ‘std::vector<double> imag’ shadows a parameter
Run Code Online (Sandbox Code Playgroud)

也许有更好的方法来做到这一点?这是完整的测试程序:

#include <iostream>
#include <vector>

void compute(const std::vector<double> &input,
                    std::vector<double> &real, std::vector<double> &imag)
{
        unsigned int N = input.size();
        unsigned int csize = (N / 2) + 1;

        // the error occurs here
        std::vector<double> real(csize);
        std::vector<double> imag(csize);

        for (int i = 0; i < csize; i++)
        {
            real[i] = input[i] * i;
            imag[i] = input[i] * -i;
        }
 } // end


int main()
{
    const int num = 10;
    std::vector<double> input(num);
    for(int i = 0; i < num; i++)
        input[i] = i;

    std::vector<double> real;
    std::vector<double> imag;

    compute(input, real, imag);

 } // end
Run Code Online (Sandbox Code Playgroud)

Pub*_*bby 5

向量已经存在,因此您不希望再次创建它们,而是将它们调整为适当的大小:

real.resize(csize);
imag.resize(csize);
Run Code Online (Sandbox Code Playgroud)

你的代码实际上是有效的,但是因为你正在编译-Werror它被拒绝了.通过"阴影"意味着您将创建和修改函数本地的向量,因此通过引用传递的向量将不会更新.