0

我正在尝试使用类的函数更改向量中的值,该向量是类中的变量。当我编译时,我得到以下指向“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++;
    }
4

3 回答 3

6

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]在为它分配任何东西之前确保它是向量中的有效位置。

于 2012-07-17T21:46:08.620 回答
3

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
};
于 2012-07-17T21:45:18.147 回答
0

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

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

需要是:

private:
    vector<double> check;  // A private data member
于 2012-07-17T21:47:52.700 回答