繁体   English   中英

VS 2015 C ++编译问题

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM