为什么我在下面的代码中出现此错误?
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
答案 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;
}