VS 2015 c ++编译问题

时间:2015-09-21 04:55:24

标签: c++ visual-studio-2015

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

这是为了在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

1 个答案:

答案 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>,因为它为您管理内存(并提供了一系列非常有用的功能)。