我有一段代码已被剪切,我已经使用了一段时间来创建动态数组,它突然停止工作。
这是为了在c ++控制台应用程序中不使用向量来创建动态数组。即使我过去运行良好的所有旧程序都不再编译,但它包括在内。
int main()
{
int n = 5;
AllocateArray newArray(n);
int *myArray = newArray.create();
delete[] myArray;
return 0;
}
class AllocateArray {
private:
int *newArray;
int size;
public:
AllocateArray(int);
int* create() { return (newArray = new int[size]); }
~AllocateArray() {
delete newArray;
}
};
AllocateArray::AllocateArray(int n)
{
size = n;
}
在标题
中int* allocateArray(int n);
这是我的错误日志,任何人都可以帮忙找到发生的事情吗?
Severity Code Description
Error C2065 'AllocateArray': undeclared identifier
Error C2146 syntax error: missing ';' before identifier 'newArray'
Error C3861 'newArray': identifier not found
Error C2065 'newArray': undeclared identifier
Error C2228 left of '.create' must have class/struct/union
答案 0 :(得分:1)
在AllocateArray
之前移动您的main()
声明。
用户@JoachimPileborg解释说:
C ++需要声明您使用的符号(有时候定义) 在使用它们之前。
class AllocateArray {
private:
int *newArray;
int size;
public:
AllocateArray(int);
int* create() { return (newArray = new int[size]); }
~AllocateArray() {
delete[] newArray; // changed to 'delete[]' from 'delete'
}
};
int main()
{
int n = 5;
AllocateArray newArray(n);
int *myArray = newArray.create();
//delete[] myArray; // error: delete is called by AllocateArray's destructor.
return 0;
}
AllocateArray::AllocateArray(int n)
{
size = n;
}
警告强>
您要删除两次相同的指针 P 。进入AllocateArray
的析构函数,进入main()
。您的create()
功能将{strong> P 返回myArray
中的main()
。然后你删除它,但在main()
结束时,AllocateArray
的析构函数被调用,它会再次尝试删除 P 。
备注强>
如果您打算自己分配数组,则应该查看RAII习语。但是,您应该考虑使用std::vector<T>
,因为它为您管理内存(并提供了一系列非常有用的功能)。