将数组传递给对象方法

时间:2011-12-14 17:42:05

标签: c++ arrays parameter-passing

我遇到了一个基本的阵列问题,我似乎无法理解。

我有一个类“StaticDisplayLayer”,构造函数有2个参数 - 一个int和一个指向3个无符号短整数的数组的指针:

//constructor definition:
StaticDisplayLayer(int type, unsigned short *displayColor[3]);

//constructor code:
StaticDisplayLayer::StaticDisplayLayer(int type, unsigned short *dColor[3]) : DisplayLayer(type)
{
    displayColor = dColor;
}

我正在尝试使用以下内容创建该类的实例:

unsigned short layerColor[3] = {(unsigned short)255,(unsigned short)255,(unsigned short)255};
StaticDisplayLayer myLayer(1, &layerColor);

我的理解是& layerColor是指向layerColor数组的指针,但编译器给出了以下错误:

no matching function for call to `StaticDisplayLayer::StaticDisplayLayer(int, short unsigned int (*)[3])'
Candidates are:
   StaticDisplayLayer::StaticDisplayLayer(const StaticDisplayLayer&)
   StaticDisplayLayer::StaticDisplayLayer(GLenum, short unsigned int**)

我知道第二个候选人是我正在尝试使用的那个,但显然我不理解指向数组的指针的概念。如果有人可以阐明如何调用该构造函数和/或任何解释这一点的资源我会很感激 - 到目前为止,我的在线搜索并没有真正发现。

3 个答案:

答案 0 :(得分:5)

unsigned short *dColor[3]不是指向数组的指针,它是指向指针数组的指针。 [3]被忽略并替换为另一个指针,因为它是一个函数参数。换句话说,它衰变。要创建指向数组的指针,请使用unsigned short (*dColor)[3],它是指向大小为3 unsigned short的数组的指针。

在C ++中更好的想法是使用对数组的引用:

unsigned short (&dColor)[3]

然后通过layerColor

答案 1 :(得分:1)

&layerColor的类型为pointer to array of 3 unsigned shorts。另一方面,您的构造函数需要unsigned short *[3] array of three pointers to unsigned short。事实上,作为函数参数类型,它是pointer to pointer to unsigned short - 维度被完全忽略。我认为你的意思是你的构造函数只需要一个指向unsigned short的指针并传递layerColor

StaticDisplayLayer(int type, unsigned short *displayColor);

unsigned short layerColor[3] = {255,255,255};
StaticDisplayLayer myLayer(1, layerColor);

请注意,在这种情况下,调用者有责任传递一个至少包含3个元素的数组。或者,你可以通过

使函数采用正好3个ushorts的数组
 StaticDisplayLayer(int type, unsigned short (&displayColor)[3]);

但在这种情况下,您将无法传递动态分配的数组。

我不得不注意到你缺乏C ++的某些基础知识,所以我建议你阅读good C++ book

答案 2 :(得分:1)

unsigned short displayColor [3]基本上是指无符号短指针数组或无符号短*

unsigned short layerColor [3]是一个无符号短整数组,而不是无符号短指针数组。

我会为颜色创建一个结构或类,然后将指针或引用传递给它。