не был объявлен в этой области C ++ - PullRequest
0 голосов
/ 18 ноября 2009

Почему я получаю эту ошибку в коде ниже?

class ST : public Instruction{
public:
ST (string _name, int _value):Instruction(_name,_value){}

    void execute(int[]& anArr, int aVal){
        //not implemented yet
        cout << "im an st" <<endl;
        anArr[value] = aVal;
    }
    virtual Instruction* Clone(){
        return new ST(*this);
    }
};



classes.h:81: error: ‘anArr’ was not declared in this scope
classes.h:81: error: ‘aVal’ was not declared in this scope

Ответы [ 4 ]

4 голосов
/ 18 ноября 2009

Поскольку тип anArr недопустим.

Также вас может заинтересовать использование ковариантного типа возврата в вашем методе клонирования. То есть он может вернуть указатель на ST вместо инструкции.

4 голосов
/ 18 ноября 2009

У вас проблема с типом первого параметра вашей функции execute. Прочитайте это , чтобы узнать больше о том, как передавать массивы вокруг.

1 голос
/ 18 ноября 2009

Если execute() должен принимать массив целых чисел, вы, вероятно, должны объявить его следующим образом:

void execute(int* anArr, int anArrLength, int aVal)
{
   // ...
}

Обратите внимание, что в вашем методе есть несколько отличий:

  • anArr передается как указатель на начало массива. Код клиента может просто передать имя переменной массива, поскольку по определению это эквивалентно «указателю на начало массива».
  • anArrLength передается для указания длины массива. Это необходимо для того, чтобы метод execute() не обращался к памяти, находящейся за пределами массива (или того, что было выделено для массива). Это может привести к повреждению памяти .

Вы можете улучшить сигнатуру метода выше, добавив возвращаемое значение, чтобы указать успех или неудачу. Это позволило бы клиентскому коду определить наличие проблем. Например:

// Returns true on success, false on failure
bool execute(int* anArr, int anArrLength, int aVal)
{
    // Get "value" through whatever means necessary
    // ...

    if (value >= anArrLength)
    {
        // Out of bounds of array!
        return false;
    }

    anArr[value] = aVal;

    // Do whatever else you need to do
    // ...

    return true;
}
1 голос
/ 18 ноября 2009

Попробуйте это:

void execute (int anArr [], int aVal)

, поскольку вы не можете использовать массив ссылок.

...