类中的对象数组

时间:2013-11-26 15:02:24

标签: c++ arrays class dynamic

所以,我有两个类:Node和Graph。在Graph类的私有部分中,我声明了这个:

int size;
Node* n;

在Graph构造函数中,我正在尝试创建一个动态数组:

size=1;

Node *n = new Node[size];

但是我收到一个错误:“访问冲突读取位置0xcccccd44”。我该如何解决?我知道我必须对数组做错事,但我不知道如何修复它。

类图:

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());
    }
}

2 个答案:

答案 0 :(得分:2)

您正在构造函数中重新声明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());
    }
}

在您的版本中,您正在初始化一个名为n的局部变量,该变量与您班级中声明的n不同。

答案 1 :(得分:0)

正如我在您发布其余代码之前在评论中提到的那样,您在此处隐藏了您的成员变量n

Node *n = new Node[size];
^^^^^^^

这声明了一个新的自动变量n,它在您离开构造函数后将不存在,并且还会泄漏内存,只需将其更改为:

n = new Node[size];

正如其他人已经提到过使用std::vector会更容易。