gpt4 book ai didi

c - 实现 (.c) 文件与其自身的定义 (.h) 文件冲突

转载 作者:太空宇宙 更新时间:2023-11-04 06:12:16 24 4
gpt4 key购买 nike

我正在尝试创建一个可以计算类(class)加权平均值的项目。在这个项目中,我决定将头文件的声明和实现拆分为单独的 .h 和 .c 文件,然后将它们链接在一起作为目标文件。在我创建我最近的文件(一个 vector 函数库)之前,这一直很有效。当我尝试构建项目时,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 文件对都没有发生这种情况。上网查了也没有结果,所以发帖在这里。

最佳答案

如错误消息所述,指定函数的声明与其定义之间存在冲突。具体来说:

  • vector_append_float 的第二个参数为 float,但声明显示为 int
  • vector_get_float 返回 float 但声明说它返回一个 int
  • vector_set_floatfloat 作为它的第三个参数,但声明说它应该是 int

函数的声明和定义需要匹配。由于定义似乎使用了正确的类型,您需要更新头文件中的声明以匹配。

关于c - 实现 (.c) 文件与其自身的定义 (.h) 文件冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53839711/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com