c++ - “无效使用 void 表达式”传递函数参数

标签 c++

这是我的一段代码,用于求解微分方程组。

Vector dydx(Neq);
void DiffEq(Vector x, Vector &dydx)
{
    dydx(0) = x(1);
    dydx(1) = -x(0);
}

double MidPoint(int n, Vector x)
{
    double h=H/n;
    Matrix z(n+1,n+1);
    z.fillRow(0,x);
    DiffEq(x, dydx);
    z.fillRow(1,AddVec(x, dydx*h));      //Error: Invalid use of void expression
    for (int j=1; j<n; j++)
    {
        DiffEq(z.getRow(j), dydx);
        z.fillRow(j+1, AddVec(z.getRow(j-1), dydx*h*2));     //error: void value not ignored as it ought to be
    }   
    DiffEq(z.getRow(n), dydx);
    return 0.5*AddVec(z.getRow(n), z.getRow(n-1), dydx*h);       //Error: Invalid use of void expression
}

类 Vector 和 Matrix 是自定义的。这是 vector

class Vector
{
    public:
    Vector(size_t size): vSize(size), vData(size){}
    int getSize(){return vSize;}
    double& operator()(size_t i){return vData[i];}
    double operator()(size_t i) const {return vData[i];}
    void operator+(double d)                        // These only overload the Vector + int operator
    {
        for (int i=0; i<vSize; i++) {vData[i]=vData[i]+d;}
    }

    void operator*(double d)
    {
        for (int i=0; i<vSize; i++) {vData[i]=vData[i]*d;}
    }


    size_t vSize;
    vector<double> vData;
};

有一个函数

Vector AddVec(Vector v1, Vector v2)
{
    Vector totVec(v1.getSize());
    for (int i=0; i<v1.getSize(); i++) {totVec(i) = v1(i) + v2(i);}
    return totVec;
}

3 个 vector 的函数相同。

现在我意识到错误意味着我正在将 void 传递给某个函数,但我无法弄清楚哪里出了问题。当我尝试编写测试程序时,一切似乎都运行良好。

最佳答案

你的运营商返回无效

void operator+(double d)                        // These only overload the Vector + int 
{
    for (int i=0; i<vSize; i++) {vData[i]=vData[i]+d;}
}

void operator*(double d)
{
    for (int i=0; i<vSize; i++) {vData[i]=vData[i]*d;}
}

因此,当您调用 AddVec(x, dydx*h) 时,它会调用 AddVec(x, void)

关于c++ - “无效使用 void 表达式”传递函数参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18988535/

相关文章:

c++ - 在服务器上使用的 2D 图形库

C++ 表达式求值。 'evaluation' 是什么意思?

c++ - boost::asio::streambuf 为空?

c++ - 多个定义?

c++ - 声明为私有(private)成员的 Mutex 会产生错误,但当它是全局成员时不会

c++ - C- 不兼容的指针类型用“int”类型的表达式初始化 'int *'

c++ - 将 '\0' 放入数组最后一个元素之后的 char[] 是否安全?

c++ - 分配没有一维的多维数组

c++ - 删除显式默认函数声明时发出警告

c++ - 我应该把 C++ #include 放在哪里?在标题中还是在实现中?