未在此范围C ++中声明

时间:2009-11-18 06:27:29

标签: c++ compiler-errors scope

为什么我在下面的代码中出现此错误?

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 个答案:

答案 0 :(得分:4)

因为anArr的类型无效。

您可能也有兴趣在克隆方法上使用covariant return type。即它可以返回指向ST而不是指令的指针。

答案 1 :(得分:4)

您的execute功能的第一个参数类型有问题。阅读this以了解有关如何传递数组的更多信息。

答案 2 :(得分:1)

试试这个:

void execute(int anArr [],int aVal)

因为你不能使用引用数组。

答案 3 :(得分:1)

如果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;
}