VS 2015 c++编译问题
VS 2015 c++ compile issue
我有一个代码,我已经使用了一段时间来创建动态数组,它突然停止工作。
这意味着在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()
中。P由create()
函数返回给main()
中的myArray
。然后你删除它,但是在main()
的末尾,AllocateArray
的析构函数被调用,它试图再次删除P。
如果您打算自己分配数组,您应该查看RAII习惯用法。但是,您应该考虑使用std::vector<T>
,因为它为您管理内存(并提供一系列非常有用的功能)。
相关文章:
- 编译包含字符串的代码时遇到问题
- 在编译C++代码(具有dlib和opencv)到WASM时面临问题
- 编译要在英特尔Hyperscan中使用的.cc文件时出现问题
- 如何在 Mac 上正确编译C++,当它在 Linux 上编译没有问题时?
- Rextester 语言编译C++问题
- 这是使用回溯的 nqueen 问题,但我使用了动态 2d 数组,我的程序编译良好,但不返回任何输出
- 编译 llvm 插件时出现问题:llvm/Config/llvm-config.h:没有这样的文件或目录
- C++ 多级虚拟继承编译问题
- 编译问题:在函数"_start"中:未定义对"主"的引用 collect2:错误:ld 返回 1 个退出状态
- 在Linux上使用Clang / OLLVM交叉编译helloworld Windows可执行文件时的问题
- 使用 CImg 库的 std::min 和 std::max 的编译问题
- Qt Visual Studio 2015 加载项编译问题
- 构造函数和 G++ 编译配方的问题
- 解析问题 - 预期的非限定 ID - #include <array> 编译错误
- libssh 问题编译问题未定义的错误
- Eclipse 问题 - 编译期间不考虑 .c 和 .cpp 文件中定义的预处理
- Visual Studio 2017问题编译了C 代码,而该代码则在Linux中编译
- 这个C++代码有什么问题?编译错误:调用“测试::测试(测试)”没有匹配函数
- 试图编译基本Boost PropertyTree示例时出现问题-编译错误.该怎么做
- 如何解决***缺少分隔符的问题.编译QT(或支持库)时