无效使用非静态数据成员(数组)

时间:2013-04-03 20:16:37

标签: c++ arrays overloading member subscript-operator

我对C ++很陌生,所以这可能是一个相当不错的问题,但我找不到解决方案。我一直在寻找答案,TA似乎具有逻辑等效但神秘的工作代码,我们无法弄清楚原因。

我正在尝试在我的头文件中声明一个数组(名为'array),并且我不断收到一些奇怪的错误。当我公开宣布它为“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();
}`

a [i] = i * 10;是编译器抱怨的地方。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

您的operator[]会返回int,并以未命名的临时值的形式返回给调用者;一个“rvalue”。 (历史上所谓的,因为它是允许在赋值语句的右半部分发生的一组操作)

a[i] = i * 10;之类的语句没有意义,因为您将修改a[i]的未命名临时结果。如果您希望某人能够修改指向int的内存中的IntArray::array,则返回引用。