我必须在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);
}
}
答案 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;
}