VS 2015 c++编译问题

VS 2015 c++ compile issue

本文关键字:问题 编译 c++ 2015 VS      更新时间:2023-10-16

我有一个代码,我已经使用了一段时间来创建动态数组,它突然停止工作。

这意味着在c++控制台应用程序中创建一个不使用vector的动态数组。即使是我所有以前工作得很好的旧程序,当它被包含时也不再编译。

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的声明移到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()中。Pcreate()函数返回给main()中的myArray。然后你删除它,但是在main()的末尾,AllocateArray的析构函数被调用,它试图再次删除P

指出

如果您打算自己分配数组,您应该查看RAII习惯用法。但是,您应该考虑使用std::vector<T>,因为它为您管理内存(并提供一系列非常有用的功能)。