如何在 c 中处理此类消息 - 'objectFromFile' 的冲突类型
How to handle this kind of message in c - conflicting type for 'objectFromFile'
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;
}
此函数从文件创建对象,但当我尝试 return 函数中的值时,我收到了此类消息 - "conflicting type for 'objectFromFile'. " 我尝试查找错误但看不到它。我在 ubuntu 上使用带有 gcc 编译器的 eclipse 环境使用 VM 工作站播放器。
我真的很感激你的帮助。
您的函数需要一个原型。
将此放在 createObject
之前:
Object* objectFromFile(FILE *file);
此 "conflicting type" 错误是由称为隐式声明的遗留概念引起的,其中所有函数在未传递参数的情况下都返回 int
。
您可以使用选项 -std=c11 -pedantic -Wall -Wextra -Werror
进行编译(C11 标准,严格遵守,所有和额外的警告,警告是错误)以在将来捕获这些错误。
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;
}
此函数从文件创建对象,但当我尝试 return 函数中的值时,我收到了此类消息 - "conflicting type for 'objectFromFile'. " 我尝试查找错误但看不到它。我在 ubuntu 上使用带有 gcc 编译器的 eclipse 环境使用 VM 工作站播放器。 我真的很感激你的帮助。
您的函数需要一个原型。
将此放在 createObject
之前:
Object* objectFromFile(FILE *file);
此 "conflicting type" 错误是由称为隐式声明的遗留概念引起的,其中所有函数在未传递参数的情况下都返回 int
。
您可以使用选项 -std=c11 -pedantic -Wall -Wextra -Werror
进行编译(C11 标准,严格遵守,所有和额外的警告,警告是错误)以在将来捕获这些错误。