2011-12-14 149 views
1

我遇到了一个基本的数组问题,我似乎无法得到我的头。传递数组到对象方法

我有一个类“StaticDisplayLayer”和构造函数有两个参数 - 一个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**) 

我知道第二个候选人是我正在尝试使用的人,但显然我不明白指向数组的指针的概念。如果有人能够阐明如何调用构造函数和/或解释这个的任何资源,我会很感激它 - 到目前为止,我在网上的搜索并没有真正发挥很大的作用。

+0

你有没有考虑过为此使用`std :: vector`?你可以用它来解决所有那些复杂的语法。 – Naveen 2011-12-14 17:47:47

+0

是的,我正要用矢量来重写它,但不想只是让我不明白自己做错了什么。 – TheOx 2011-12-14 17:59:45

回答

5

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

一种在C++中甚至更好的想法是使用一个参照的数组:

unsigned short (&dColor)[3] 

而只是通过layerColor

+0

对于建议使用参考的+1。 – 2011-12-14 17:51:29

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

1

无符号短displayColor [3]是说一个无符号的短指针或基本无符号短*的阵列。

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

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