Файл реализации (.c) конфликтует с собственным файлом определения (.h) - PullRequest
0 голосов
/ 18 декабря 2018

Я пытаюсь создать проект, который может рассчитать средневзвешенное значение для класса.В этом проекте я решил разделить объявления и реализации заголовочных файлов на отдельные файлы .h и .c соответственно, а затем связать их вместе как объектные файлы.Это работало хорошо, пока я не создал свой самый последний файл, библиотеку векторных функций.Когда я пытаюсь построить проект, сигнатуры функций из vector.h конфликтуют с сигнатурами из vector.c.Вот файлы:

vector.h:

#ifndef VECTOR_H
#define VECTOR_H

void vector_initiate_float(Vector_float *vector);

void vector_append_float(Vector_float *vector, int value);

int vector_get_float(Vector_float *vector, int index);

void vector_set_float(Vector_float *vector, int value, int index);

void vector_double_cap_if_full_float(Vector_float *vector);

void vector_free_float(Vector_float *vector);

#endif /* VECTOR_H */

vector.c:

    #include <stdio.h>
    #include <stdlib.h>
    #include "constants.h"
    #include "vector.h"
    void vector_append_float(Vector_float *vector, float value){
        vector_double_cap_if_full_float(vector);
        vector->data[vector->size++] = value;
    }

    float vector_get_float(Vector_float *vector, int index){
        if (index >= vector->size || index < 0) {
        printf("Index %d out of bounds for vector of size %d\n", index, vector->size);
        exit(1);
      }
      return vector->data[index];
    }

    void vector_set_float(Vector_float *vector, int index, float value){
       while (index >= vector->size) {
        vector_append_float(vector, 0);
      }

      // set the value at the desired index
      vector->data[index] = value;
    }

    void vector_double_cap_if_full_float(Vector_float *vector){
        if (vector->size >= vector->capacity) {
        // double vector->capacity and resize the allocated memory accordingly
        vector->capacity *= 2;
        vector->data = realloc(vector->data, sizeof(int) * vector->capacity);
      }
    }

    void vector_free_float(Vector_float *vector){
        free(vector->data);
    }

вывод, когда я запускаю gcc -c vector.c

vector.c:14:6: error: conflicting types for ‘vector_append_float’
 void vector_append_float(Vector_float *vector, float value){
      ^~~~~~~~~~~~~~~~~~~
In file included from vector.c:11:
vector.h:14:6: note: previous declaration of ‘vector_append_float’ was here
 void vector_append_float(Vector_float *, int);
      ^~~~~~~~~~~~~~~~~~~
vector.c:19:7: error: conflicting types for ‘vector_get_float’
 float vector_get_float(Vector_float *vector, int index){
       ^~~~~~~~~~~~~~~~
In file included from vector.c:11:
vector.h:16:5: note: previous declaration of ‘vector_get_float’ was here
 int vector_get_float(Vector_float *, int);
     ^~~~~~~~~~~~~~~~
vector.c:27:6: error: conflicting types for ‘vector_set_float’
 void vector_set_float(Vector_float *vector, int index, float value){
      ^~~~~~~~~~~~~~~~
In file included from vector.c:11:
vector.h:18:6: note: previous declaration of ‘vector_set_float’ was here
 void vector_set_float(Vector_float *, int, int);

Как видите, определения функций в обоих файлах конфликтуют друг с другом, хотя этого не происходит ни с одной другой парой файлов .c и .h в моем проекте.Поиск в интернете не принес никаких результатов, поэтому я пишу здесь.

1 Ответ

0 голосов
/ 18 декабря 2018

Как сообщают сообщения об ошибках, существует конфликт между объявлениями указанных функций и их определениями.В частности:

  • vector_append_float имеет float для второго параметра, но объявление показывает int.
  • vector_get_float возвращает float, но объявление говорит, что возвращаетint.
  • vector_set_float принимает float для своего третьего параметра, но в объявлении говорится, что это должно быть int.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...