[英]VS 2015 c++ compile issue
我已经使用了一段时间的代码来创建动态数组,但它突然停止了工作。
这旨在创建动态数组,而无需在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
将您的AllocateArray
声明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()
。 P由您的create()
函数返回给main()
myArray
。 然后将其删除,但是在main()
的末尾, AllocateArray
调用AllocateArray
的析构函数,并尝试再次删除P。
笔记
如果您打算自己分配数组,则应该查看RAII习惯用法。 但是,您应该考虑改用std::vector<T>
,因为它可以为您管理内存(并提供非常有用的功能范围)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.