2013-05-17 15 views
1

我有以下:以指针数组作为参数,然后在分配给一个字段

class foo { 
private: 
    bar * x[]; 
public: 
    foo(bar * x[]); 
}; 

foo::foo(bar * x[]) { 
    this->x = x; 
} 

据我明白,x是一个指针的指针到一个bar阵列的第一元件(字段x和参数x)。但我一定是错的,因为这段代码不起作用。我得到以下错误:

In constructor 'foo::foo(bar**)': error: incompatible types in assignment of 'bar**' to 'bar* [0]'

请问该如何解决这个问题?我不正确的理解是什么?

注意:正如您可能已经假设的那样,bar是一个类,而不是某个原始类型的占位符。

编辑:

我的目标是在程序的其它地方这样做:

bar a[2]; 
bar b0 = bar(), b1 = bar(); 
a[0] = &b0; 
a[1] = &b1; 
bar * x[] = &a; 
foo f = foo(x); 

我将如何做到这一点?另外,bar * x[] = &a;不等于bar ** x = &a,其中&a等于&(&a[0])?我在这里不了解什么?

+0

'x'不是一个指针,它是一个数组! – chris

+0

'bar * x [];'如果没有给出私有大小为'0',其零大小数组不指向指针,*函数参数声明和正常声明是不同的* –

+0

但是数组本身是指向它们的第一个元素的指针,不是吗? –

回答

3
bar * x[]; 

xbar指针数组(不知道为什么你不声明数组的大小)。

例如,

int a[] = { 11, 22, 33 }; 
int b[3]; 

b = a; // Error 

不能分配一个阵列到另一个阵列。您必须以编程方式将各个数组元素复制到另一个数组元素。为了做到这一点,您需要源,目标数组的大小。

+0

当然你可以分配现代数组,虽然(std :: array) – chris

+0

我没有声明数组的大小,因为数组的大小是未知的,我想把指针数组作为参数。 –

+2

@Iredredasting如果你不知道数组的大小,那么你必须分别跟踪它的大小,或者使用'std :: vector'。 – juanchopanza

相关问题