C++ 类中的对象数组
所以,我有两个类:Node和Graph。在Graph类的私有部分,我声明:C++ 类中的对象数组,c++,arrays,class,dynamic,C++,Arrays,Class,Dynamic,所以,我有两个类:Node和Graph。在Graph类的私有部分,我声明: int size; Node* n; 在图形构造函数中,我尝试创建一个动态数组: size=1; Node *n = new Node[size]; 但我得到一个错误:“访问冲突读取位置0xCCCD44”。我怎样才能修好它?我知道我一定是对数组做了一些错误,但我不知道该如何修复它 类图: class Graph { friend class Node; private: int s
int size;
Node* n;
在图形构造函数中,我尝试创建一个动态数组:
size=1;
Node *n = new Node[size];
但我得到一个错误:“访问冲突读取位置0xCCCD44”。我怎样才能修好它?我知道我一定是对数组做了一些错误,但我不知道该如何修复它
类图:
class Graph {
friend class Node;
private:
int size;
Node* n;
public:
Graph();
Graph(int, Vertex*);
~Graph();
void Draw(RenderWindow &);
void Update(RenderWindow &, GameObject &, bool);
};
和两名施工人员:
Graph::Graph() {
size=1;
Node *n = new Node[size];
}
Graph::Graph(int s, Vertex p[]) {
size=s;
Node *n = new Node[size];
for (int i=0; i<size; i++) {
n[i].setNumer(i);
n[i].setX(p[i].getX());
n[i].setY(p[i].getY());
}
}
Graph::Graph(){
尺寸=1;
节点*n=新节点[大小];
}
Graph::Graph(int s,顶点p[]){
尺寸=s;
节点*n=新节点[大小];
对于(int i=0;i你在构造函数中重新定义了n
。你用size
做对了,但用n
做不对。像这样
Graph::Graph(int s, Vertex p[]) {
size=s;
n = new Node[size];
for (int i=0; i<size; i++) {
n[i].setNumer(i);
n[i].setX(p[i].getX());
n[i].setY(p[i].getY());
}
}
Graph::Graph(ints,顶点p[]){
尺寸=s;
n=新节点[大小];
对于(int i=0;i,正如我在发布其余代码之前的评论中提到的,您正在将您的成员变量n
隐藏在此处:
Node *n = new Node[size];
^^^^^^^
这声明了一个新的自动变量n
,它在您离开构造函数后将不存在,并且还会泄漏内存,只需将其更改为:
n = new Node[size];
正如其他人已经提到的那样,使用会更容易。你需要发布更多的代码,但我猜你没有遵循。好吧,这里真的没有更多的代码要添加…我将把代码放在第一篇文章中。你的意思是初始化成员n
,而不是用相同的名称声明一个局部变量吗?为什么不呢使用std::vector
来避免手动指针杂耍带来的所有问题?这不应该是n=new Node[size];
,您正在隐藏您的成员变量n
。无论如何都要使用std::vector
。