2016-04-04 7 views
0

Ich möchte ein 2D-Array als Parameter übergeben. Das Problem ist, dass die Größe des 2d-Arrays immer variiert. Also kann ich nicht so etwas wie meine Funktion schreiben (int a [2] [5]);C - Wie man ein variables 2d Array als Parameter übergibt

Ich habe eine Header-Datei mit vielen 3D-Koordinaten. z.B .:

float someArray[][3] = {{0.0,1.0,-2.0},{-1.0,1.0,-2.0},{-1.0,1.0,0.0},{0.0,1.0,0.0}, 
      {-1.0,0.75,-2.0},{-1.0,1.0,-2.0},{-1.0,1.0,0.0},{-1.0,0.75,0.0}, 
      {0.0,0.75,-2.0},{0.0,1.0,-2.0},{0.0,1.0,0.0},{0.0,0.75,0.0}, 
      {0.0,0.75,-2.0},{-1.0,0.75,-2.0},{-1.0,0.75,0.0},{0.0,0.75,0.0}, 
      {0.0,0.75,-2.0},{-1.0,0.75,-2.0},{-1.0,1.0,-2.0},{0.0,1.0,-2.0}, 
      }; 


void drawVertex(const float **vertex, int numberVertex, int shape) 
{ 
    int i; 

    glPushMatrix(); 
    switch(shape) 
    { 
     case 0: glBegin(GL_LINES); break; 
     case 1: glBegin(GL_POLYGON); break; 
     default: break; 
    } 

    for(i=0;i<numberVertex;i++) 
    { 
     glVertex3fv(vertex[i]); 
    } 
    glEnd(); 
    glPopMatrix(); 

} 

ruft die Funktion Ich habe versucht:

diese nur zum Absturz bringen (Core Dump)

drawVertex(someArray, 6,1); 
drawVertex(*someArray, 6,1); 

Soll ich die Parameter der Funktion drawVertex ändern()? Ich habe viele Dinge ausprobiert, aber nichts scheint Arbeit zu sein.

+1

'const GLfloat **' ist kein 2D-Array und kann keines repräsentieren. Verwenden Sie die normale Array-Notation oder einen expliziten Zeiger auf das Array (aufgrund der automatischen Konvertierung der Formatparameter sind sie identisch). – Olaf

+0

Und nachdem Sie @ Olaf's Vorschlag gemacht haben, können Sie es nicht global machen? –

+0

Compiler Warnungen sind nicht nur um einige ausgefallene Nachrichten anzuzeigen. Ignoriere sie nicht und es wird erwartet, dass du sie aktivieren und ihnen Beachtung schenken kannst, bevor du fragst. – Olaf

Antwort

0

Wenn Sie ein Array benötigen, müssen Sie ein Array verwenden. Pointer-to-Pointer haben wenig mit Arrays zu tun. Ändern Sie die Funktion:

void drawVertex(const GLfloat vertex[][3], int numberVertex, int shape) 

oder besser noch:

void drawVertex(int numberVertex, const GLfloat vertex[numberVertex][3] int shape) 
+0

Ich mag wirklich die zweite Option, die Sie vorgeschlagen haben, nette. Der Compiler sagt jedoch "numberVertex undefined". Das Problem ist, dass ich #define nicht verwenden kann, weil es eine Variable ist, die sich jedes Mal ändert, wenn ich diese Funktion anrufe – privetDruzia

+0

@privetDruzia: Wenn Sie einen solchen Fehler erhalten, haben Sie einen Tippfehler. Da die äußerste Dimension ohnehin nicht verwendet wird, muss sie nicht angegeben werden. Es ist jedoch gut für Dokumentationszwecke. – Olaf

+2

@privetDruzia Sie könnten einen 26 Jahre alten Compiler haben. Erwägen Sie, auf ein Upgrade zu aktualisieren, das nicht älter als 17 Jahre ist. – Lundin

0

Es ist wie der Eingang sieht hier ist ein Zeiger auf einen Zeiger const float **vertex, die ich nicht wirklich verstehen. Können Sie als void drawVertex(const float vertex[][3], int numberVertex, int shape) definieren? Es sieht auch so aus, als ob Sie versuchen, ein Array von konstanten Werten einzugeben. Die Eingabe someArray[][3] ist jedoch nicht als Array von Konstanten definiert.

Verwandte Themen