2016-04-10 16 views
0

Ich deklarierte ein Array und übergeben Sie ein 2D-Array als Parameter. Allerdings bekomme ich immer den gleichen Fehler: subskribierter Wert ist weder Array noch Pointer oder Vektor. für diese Linie: Vertex [i] [j-1] = Form [i] [j];C - subskribiert Wert ist weder Array noch Zeiger und Vektor

Wie kann ich es lösen?

Header-Datei:

GLfloat mijnplayer [][4] ={ 
{0,-0.091057,0.198079,0.084590}, 
{0,-0.158043,0.158043,0.071039}, 
{0,-0.071039,0.158043,0.158043}}; 

Funktionsaufruf:

int main(void) 
{ 

drawVertex(mijnplayer,3,1); 

} 

void drawVertex(GLfloat shape[][4], int numberVertex, int shape) 
{ 
    int i,j; 
    GLfloat vertex[][3]={0}; 


    //convert 4element array to 3 element array 
    for(i=0;i<numberVertex;i++) 
    { 
     for(j=1;j<4;j++) 
     { 
      vertex[i][j-1] = shape[i][j]; 
     } 

    } 

    for(i=0;i<numberVertex;i++) 
    { 

     glVertex3fv(vertex[i]); 
    } 

} 

EDIT:

die komplette Compiler Ausgabe:

cc -c -o mijnTest.o mijnTest.c

mijnTest.c: 23: 59: Fehler: widersprüchliche Arten für 'Form'

Hohlraum drawVertex (GLfloat Form [] [4], int numberVertex, int Form) ^

mijnTest.c: 23: 25: Hinweis: vorherige Definition von 'Form' war hier

Leere drawVertex (GLfloat Form [] [4], int numberVertex, int Form) ^

mijnTest.c: In der Funktion 'drawVertex':

mijnTest.c: 43: 26: Fehler: subskribierter Wert ist weder Array noch Zeiger noch Vektor

Vertex [i] [j-1] = Form [i] [j]; ^

mijnTest.c: In Funktion 'drawScene':

mijnTest.c: 69: 2: Warnung: Übergabe des Arguments 1 von 'drawVertex' von inkompatiblen Zeigertyp [standardmäßig aktiviert]

drawVertex (Assen, 6,0); ^

mijnTest.c: 23: 6: Anmerkung: erwartete 'GLfloat () [4]', aber Argument vom Typ 'GLfloat () [3]'

Hohlraum drawVertex (GLfloat Form [] [4], int numberVertex, int Form) ^

make: *** [mijnTest.o] Fehler 1

+0

Der Datentyp der Form ist int. –

+0

Können Sie Ihre Frage bearbeiten, um die * complete * -Ausgabe des Compilers in vollständiger und unbearbeiteter Form mit allen möglichen Informationen und Warnungen zu enthalten. –

+0

@JoachimPileborg, hinzugefügt. –

Antwort

1

Sein, weil shape ist eine Variable des Datentyps int und weder Array noch Zeiger oder Vektor.

Entweder haben Sie den Datentyp falsch oder Sie verwenden nur die falsche Variable.

+0

nichts von dem, was Sie erwähnt denke ich. Der vollständige Code: http://dpaste.com/3RN0KR6 –

+0

@ J.Doe Wie können Sie Form schreiben [i] [j] und gleichzeitig Int-Form schreiben. –

+0

OMG! habe das nicht gesehen, hatte lange nach sooo gesucht! –

1

Eine Erklärung wie

GLfloat vertex[][3] 

ist nur als Funktionsargument gültig (und dann gleich GLfloat (*vertex)[3]). Wenn Sie ein Array als lokale oder globale Variable deklarieren, müssen Sie geben Sie eine Größe.

Es funktioniert, wenn Sie mijnplayer definieren, denn dann kann der Compiler die Größe aus den Daten ableiten, die Sie für die Initialisierung verwenden (die Größe wird implizit festgelegt).Wenn Sie es nicht tun, kann der Compiler nicht wissen, welche Größe das Array hat, und Sie müssen es explizit angeben.

+0

haben nicht funktioniert: http://dpaste.com/2N6ABBA, gibt immer noch den gleichen Fehler –