2016-04-10 2 views
0

Я объявил массив и передал 2D-массив в качестве параметра. Однако я продолжаю получать ту же ошибку: индексированное значение не является ни массивом, ни указателем, ни вектором. для этой строки: vertex [i] [j-1] = shape [i] [j];C - индексированное значение не является ни массивом, ни указателем, ни вектором

Как его решить?

заголовочный файл:

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

вызов функции:

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:

полный вывод компилятора:

куб.см -c -o mijnTest.o mijnTest.c

mijnTest.c: 23: 59: ошибка: конфликтующие типов для 'формы'

недействительного drawVertex (GLfloat форма [] [4], Int numberVertex, Int форма) ^

mijnTest.c: 23: 25: примечание: предыдущее определение 'формы' был здесь

аннулируются drawVertex (GLfloat форма [] [4], Int numberVertex, внутр форма) ^

mijnTest.c: В функции 'drawVertex':

mijnTest.c: 43: 26: ошибка: индексированное значение не является ни массивом, ни указателем, ни vector

vertex [i] [j-1] = shape [i] [j]; ^

mijnTest.c: В функции 'drawScene':

mijnTest.c: 69: 2: предупреждение: проходя аргумент 1 из 'drawVertex' от несовместимого типа указателя [по умолчанию включено]

drawVertex (assen, 6,0); ^

mijnTest.c: 23: 6: Примечание: ожидаемый "GLfloat () [4], но аргумент типа 'GLfloat () [3]'

пустоты drawVertex (форма GLfloat [] [4], Int numberVertex, внутр форма) ^

марка: *** [mijnTest.o] Ошибка 1

+0

Тип данных формы - int. –

+0

Не могли бы вы отредактировать свой вопрос, чтобы включить * полный * вывод компилятора в полном объеме и неотредактированный, включая любые возможные информационные заметки и предупреждения. –

+0

@JoachimPileborg, добавлено. –

ответ

1

Его потому, что shape является переменной типа данных int и его ни массивом, ни указателем, ни вектором.

Либо вы получили неправильный тип данных, либо используете неправильную переменную.

+0

ничего из того, что вы упомянутый я думаю. Полный код: http://dpaste.com/3RN0KR6 –

+0

@ J.Doe Как вы можете написать форму [i] [j] и в то же время написать int shape. –

+0

OMG! не видел этого, искал долго! –

1

декларация как

GLfloat vertex[][3] 

действителен только как аргумент функции (а затем он равен GLfloat (*vertex)[3]). Если вы объявляете массив как локальную или глобальную переменную, вы должны указать .

Он работает, когда вы определяете mijnplayer, потому что тогда компилятор может вывести размер из данных, которые вы используете для инициализации (размер задан неявно).Если вы этого не сделаете, компилятор не может знать, какой размер массива, и вам нужно явно указать его.

+0

didn t work: http://dpaste.com/2N6ABBA, по-прежнему дает ту же ошибку –