2

私は C++ に非常に慣れていないので、これはかなり初歩的な問題かもしれませんが、解決策を見つけるのに苦労しています。答えを探し回ったところ、TA には論理的に同等でありながら不思議な動作をするコードが含まれているようで、その理由がわかりません。

ヘッダー ファイルで配列 (「配列」という名前) を宣言しようとしていますが、奇妙なエラーが発生し続けます。「int* array;」として公に宣言すると、または「int array[];」、コンストラクターは、これが非静的データメンバーの無効な使用であることを通知します。プライベートと宣言すると、配列の要素がプライベートであると不平を言います。

割り当ては、演算子のオーバーロードを処理し、-3 から 5 などの奇数インデックスの配列を処理します。以下は、問題に関連するコードの一部です。

// from the .cpp file
//constructor
IntArray::IntArray(int USER_DEFINED)
{
    if (USER_DEFINED < 1)
    {
        //return some kind of error
    }
    string name;
    setName();
    int lower = 0;
    int higher = USER_DEFINED - 1;
    array = new int[higher - lower];
    //int* p = &array[abs(lower)];
}

//overload
int IntArray::operator[](int i)
{
    if (i < lower || i > higher)
    {
        //return some sort of error
    }
    else
        return array[i - lower];
}

//from the .h file
class IntArray { 
     public: 
          int* array;
          int  operator[](int i);
};

//from the driver
void test1() {
    cout << "1. Array declared with single integer: IntArray a(10);" << endl << endl;
    csis << "1. Array declared with single integer: IntArray a(10);" << endl << endl;
    IntArray a(10);
    for(int i = a.low(); i <= a.high(); i++)
        a[i] = i * 10;
    a.setName("a");
    cout << a << endl;
    csis << a << endl;
    wait();
}`

[i] = 私 * 10; コンパイラが文句を言うところです。

助けてくれてありがとう。

4

1 に答える 1