在C ++中动态声明一个指向对象的指针数组

时间:2014-07-18 03:57:33

标签: c++ arrays class pointers object

我必须在C ++中声明一个指向对象(类)的指针数组。我认为这是唯一的方法,但显然我错了,因为当我尝试编译它时会抛出语法错误。具体来说,在我收到的7个错误中,其中2个错误在行中:我使用" new"创建数组,在我调用" setData()&#的行中34;功能。你能告诉我哪里出错了吗?感谢。

#include <iostream>

class Test
{
    public:
        int x;

        Test() { x=0; }
        void setData(int n) { x=n; }
};

void main()
{
    int n;
    Test **a;

    cin >> n;
    a=new *Test[n];

    for(int i=0; i<n; i++)
    {
        *(a+i)=new Test();
        *(a+i)->setData(i*3);
    }
}

2 个答案:

答案 0 :(得分:3)

使用a=new Test*[n];
除此之外,你的程序中没有删除,琐碎的getter / setter
公共变量很奇怪,*(a+i)可能是a[i]

答案 1 :(得分:2)

您的语法很接近但略有偏差。请改用:

Test **a;

...

a=new Test*[n];

for(int i=0; i<n; i++)
{
    a[i]=new Test();
    a[i]->setData(i*3);
}

...

// don't forget to free the memory when finished...

for(int i=0; i<n; i++)
{
    delete a[i];
}

delete[] a;

由于您使用的是C ++,因此应使用std::vector。我还建议将所需的值传递给类构造函数:

#include <iostream>
#include <vector>

class Test
{
    public:
        int x;

        Test(int n = 0) : x(n) { }
        Test(const Test &t) : x(t.x) { }
        void setData(int n) { x=n; }
};

int main()
{
    int n;
    std::vector<Test> a;

    cin >> n;
    a.reserve(n);

    for(int i=0; i<n; i++)
    {
        a.push_back(Test(i*3));
    }

    ...

    // memory is freed automatically when finished...

    return 0;
}