对象初始化数组(C ++)

时间:2012-05-03 20:08:03

标签: c++ object new-operator dynamic-arrays

嘿伙计们,我是C ++的新手,而且我在大学的一个项目中遇到了一些困难时期。更多特别是: 我为列表和队列创建了一个代码(列表名称=链,队列名称=队列,产品是一个具有基本链接字段的结构)[顺便说一下,如果有人知道它,我使用过Sahnis书籍(数据结构)。我被困在这里:

int k=4;
Queue<Chain<Product>*>* x = new Queue<Chain<Product>*> [k];
for(int i=1;i<k;i++)
{
   x[i] = new Queue<Chain<Product>*> [i+1];
}

在循环上它会抛出我错误:从Queue *&gt; *到int

的转换无效

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

应该是

for(int i=0;i<k;i++)   // first index is 0
{
   x[i] = Queue<Chain<Product>*>();
}

,因为

Queue<Chain<Product>*>* x = new Queue<Chain<Product>*> [k];

创建一个Queue<Chain<Product>*>个对象的数组,而不是指针。

或者如果你想要一个二维数组,你可以使用:

Queue<Chain<Product>*>** x = new Queue<Chain<Product>*> * [k];
for(int 0=1;i<k;i++)
{
   x[i] = new Queue<Chain<Product>*> [i+1];
}

为简化,您基本上尝试以下操作:

int* x = new int[4];
for ( int i = 0 ; i < 4 ; i++ )
   x[i] = new int[i];

这显然是错误的。

答案 1 :(得分:1)

x[i] = new Queue<Chain<Product>*> [i+1]行中,[i + 1]是错误的 为什么?那么你正在创建一个新的对象new关键字。并且在数组中使用.operator[int x]。在那一行中,你说它应该是一个大小为Queue<Chain<Product>*>的大小为i + 1的新数组,它是错误的。而是使用x[i] = Queue<Chain<Product>*>();

所以最终代码是:

for(int i=0;i<k;i++)//because indexes begin at 0, not 1.
{
  x[i] = Queue<Chain<Product>*>()
}

注意*要查看错误的简化版本,请参阅其他人的帖子(我不会复制代码 - 浪费空间)。