更改类中的矢量值时出错

Error when changing a vector value in a class

本文关键字:出错      更新时间:2023-10-16

我正试图使用类的函数来更改向量中的值,该向量是类中的变量。当我编译时,我得到以下错误指向"check[c]=cval;"行:

  • 错误C3867:"acc::check":函数调用缺少参数列表;使用'&acc::check'以创建指向成员的指针

  • 错误C2109:下标需要数组或指针类型

注意:我已经在程序的其他地方将C初始化为0。它可能会抛出错误,因为我给地址的是一个变量而不是整数,但当我用整数替换变量时,我仍然会得到相同的错误。

    #include <iostream>
    #include <fstream>
    #include <string>
    #include <vector>
    #include <cstring>
    using namespace std;
    class acc
    {
    public:
        void add_Cval(double cval);
    private:
        vector<double> check(); //vector of all checks
        int c;                  //loop marker for cvals
    };
    void acc::add_Cval(double cval)
    {
        check[c] = cval;
        c++;
    }

vector<double> check();并不是你想象的那样。你刚刚声明了一个名为check的函数,它返回一个vector<double>。像这样去掉括号vector<double> check;

此外,你的vector<double>是空的,如果你想做check[c] = cval;(或者使用check.push_back(cval);),你需要给它一些空间,在构造函数中分配空间(使用"初始化列表",因为这就是它们的用途):

示例:

acc(int vecsize) : check(vecsize), c(0) {}

在为check[c]分配任何内容之前,您可能还需要确保它在向量中是一个有效的位置。

check是一个方法,而不是数据成员,因此需要调用它-check()

void acc::add_Cval(double cval)
{
    check()[c] = cval;
    c++;
}

或使其成为数据成员:

class acc
{
public:
    void add_Cval(double cval);
private:
    vector<double> check; //vector of all checks
    int c;                  //loop marker for cvals
};

编译器正在寻找一个名为check()的函数,该函数返回double类型的向量。

private:
    vector<double> check(); // A private function that returns a vector of type <double>

需要:

private:
    vector<double> check;  // A private data member