gpt4 book ai didi

c - Visual Studio 2008 C++ 中的错误

转载 作者:行者123 更新时间:2023-11-30 19:20:53 25 4
gpt4 key购买 nike

在我的 C 项目中,我收到以下错误:

error C2371: 'tDatabase' : redefinition; different basic types
db.h(7) : see declaration of 'tDatabase'
error C2223: left of '->numberOfCity' must point to struct/union
error C2198: 'calloc' : too few arguments for call

我是 C 初学者。我该如何解决这个问题?谢谢。

文件:DB.h

typedef struct Database {
int numberOfCity;
tListOfCity* list;
double **distances;
} tDatabase;

tDatabase *LoadDatabase(char* file);

文件DB.c

#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include "DB.h"

typedef struct Database{
int numberOfCity;
tListOfCity* list;
double** distances;
} tDatabase; //this line error C2371

tDatabase* LoadDatabase(char* file) {
FILE* fileName;
tDatabase *input;
char data[100];
int i, j, number = 0;

input = (tDatabase*) calloc(1, sizeof (tDatabase));
input->list = NULL;

fileName = fopen("file.txt", "r");
fscanf(fileName, "%d", &number);
input->numberOfCity = number;

input->distances = (double**) calloc(data->numberOfCity, sizeof (double*)); //this line Error C2223 and C2198
for (i = 0; i < input->numberOfCity; i++) {
input->distances[i] = (double*) calloc(input->numberOfCity, sizeof (double));
}

for (i = 0; i <= input->numberOfCity; i++) {
fgets(data, sizeof (data), fileName);
input->list = AddOnEnd(input->list, CreateCity(data));
}

for (i = 0; i < input->numberOfCity; i++) {
for (j = 0; j < input->numberOfCity; j++) {
fscanf(fileName, "%f", &input->distances[i][j]);
}

fclose(fileName);
return input;
}

最佳答案

从代码中删除struct Database的定义;这就是编译器所说的“重新定义”的意思。您不需要它,因为它已经在 "DB.h" 中。 (也就是说,实际上头文件的用途是:确保使用它的所有 c 文件都使用相同的定义,而不是“私有(private)”定义。)

[旁白:另一方面,如果您希望该结构是私有(private)的,即该结构的字段只能从 "DB.c" 内访问,只需将头文件中没有结构体的 typedef "DB.h":

typedef struct Database tDatabase;

然后像您所做的那样在 "DB.c" 中定义带有主体的结构(但没有 typedef):

struct Database {
int numberOfCity;
tListOfCity* list;
double **distances;
};

在这种情况下,来自外部“DB.c”的代码可以包含 header ,但它只能使用指向tDatabase的指针,而不获取数据。对此不透明指针的所有访问都将通过“DB.c”中定义的方法完成。]

关于c - Visual Studio 2008 C++ 中的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20932058/

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