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 に答える