Как обрабатывать сообщения такого типа в c - конфликтующий тип для objectFromFile - PullRequest
0 голосов
/ 09 января 2020
Object* createObject(char *fileName) {
    FILE *fileToObject = fopen(fileName, "r");
    if (fileToObject == NULL) {
        printf("Failed opening the file , Exiting !\n ");
        return NULL;

    }
    return objectFromFile(fileToObject);
}
//creates vertex
Vertex* createVertex(char *line, Vertex *v) {
    float x, y, z;
    sscanf(line, "%*c %f %f %f", &x, &y, &z);
    v->x = x;
    v->y = y;
    v->z = z;
    return v;
}
//creates face
Face* createFace(char *line, Face *face) {
    char *delimeters = " ";
    char *temp = (char*) calloc(1, sizeof(char));
    temp = strtok(line, delimeters);

    while (temp != NULL) {
        temp = strtok(NULL, delimeters);
        *face->vertex = atoi(temp);
    }
    return face;
}
//creates object
Object* objectFromFile(FILE *file) {
    Object *obj = (Object*) malloc(sizeof(Object));
    if (obj == NULL) {
        printf("Failed allocating memory for object");
        return NULL;
    }
    Vertex *vertexes = (Vertex*) malloc(sizeof(Vertex));
    if (obj == NULL) {
        printf("Failed allocating memory for vertex");
        return NULL;
    }
    Face *faces = malloc(sizeof(Face));
    if (obj == NULL) {
        printf("Failed allocating memory for face");
        return NULL;
    }
    obj->numberOfFaces = 0;
    obj->numberOfVertexes = 0;
    char *line = malloc(sizeof(char));
    while (fgets(line, MAX_SIZE, file)) {
        if (line[0] == 'v' && line[1] == ' ') {
            vertexes = (Vertex*) realloc(vertexes,
                    (obj->numberOfVertexes + 1) * sizeof(Vertex));
            if (vertexes == NULL) {
                printf("Failed allocating vertexes");
                return NULL;
            }
            vertexes[obj->numberOfVertexes++] = *createVertex(line, vertexes);
        } else if (line[0] == 'f' && line[1] == ' ') {
            faces = (Face*) realloc(faces,
                    (obj->numberOfFaces + 1) * sizeof(Face));
            if (faces == NULL) {
                printf("Faild allocating faces");
                return NULL;
            }
            createFace(line, faces);
            faces[obj->numberOfFaces++] = *createFace(line, faces);
        }
    }
    obj->vertexes = vertexes;
    obj->faces = faces;
    free(line);
    fclose(file);
    return obj;
}

Эта функция создает объект из файла, но когда я пытаюсь вернуть значение из функции, я получаю сообщение такого типа - «конфликтующий тип для« objectFromFile ».» Я попытался найти ошибку, но не смог видеть это. Я использую среду eclipse с компилятором g cc, в Ubuntu использую проигрыватель рабочей станции VM. Буду очень признателен за помощь.

1 Ответ

0 голосов
/ 09 января 2020

У вас должен быть прототип для ваших функций.

Поместите это перед createObject:

Object* objectFromFile(FILE *file);

Эта ошибка "конфликтующего типа" вызвана устаревшей концепцией, называемой неявным объявлением , причем все функции возвращали int, если им не был передан аргумент.

Вы можете скомпилировать с опциями -std=c11 -pedantic -Wall -Wextra -Werror (стандарт C11, строгое соответствие, все и дополнительные предупреждения, предупреждения - ошибки), чтобы перехватить эти ошибки в будущем.

...