如何解决此 C 程序中的类型重定义错误
how to solve type redefinition error in this C program
我是一名新的 C 程序员,
如果点共线,我正在编写的程序必须 return 0,否则必须 return 1。
我将代码拆分为 .h 和 .c。
这是代码:[geometry.c]
struct point {
int x;
int y;
} p1;
struct point {
int x;
int y;
} p2;
struct point {
int x;
int y;
} p3;
int colinear(struct point* p1, struct point* p2, struct point* p3) {
if (((p1->x - p2->x)* (p1->y - p2->y) == ((p3->y - p2->y) * (p1->x - p2->x))))
return 0;
else
return 1;
}
和:[geometry.h]
#ifndef geometry.h
#define geometry.h
#endif
#include "geometry.c"
extern int colinear(struct point *p1, struct point *p2, struct point *p3);
使用调试器:
"C2011: 'point': 'struct' 类型重新定义".
错误在哪里?
无需定义3次
struct point {
int x;
int y;
} p1;
struct point {
int x;
int y;
} p2;
struct point {
int x;
int y;
} p3;
只定义一次,随意创建变量。
struct point {
int x;
int y;
};
struct point p1,p2,p3;
另一个答案很好地解决了这个问题。 (即为什么代码导致 multiply defined 编译器错误。)但作为对更正代码的可能增强,以下是使用 typedef
struct
。这可能会使您需要做的一些事情更容易传递和操作结构成员值:
typedef struct {
int x;
int y;
} point_s;
point_s p[3];
这有效地允许原型:
int colinear(struct point* p1, struct point* p2, struct point* p3) {
重构为:
int colinear(point_s *p) { //where p is an pointer to 3 instances of point_s
用法示例:
int main(void)
{
point_s p[3] = {{4,6}, {-2, 5}, {-0.4, 15}};
int result = colinear(p);
return 0;
}
int colinear(point_s *p)
{
if (((p[0].x - p[1].x)* (p[0].y - p[1].y) == ((p[2].y - p[1].y) * (p[0].x - p[1].x))))
{
return 0;
}
else
{
return 1;
}
}
我是一名新的 C 程序员,
如果点共线,我正在编写的程序必须 return 0,否则必须 return 1。 我将代码拆分为 .h 和 .c。 这是代码:[geometry.c]
struct point {
int x;
int y;
} p1;
struct point {
int x;
int y;
} p2;
struct point {
int x;
int y;
} p3;
int colinear(struct point* p1, struct point* p2, struct point* p3) {
if (((p1->x - p2->x)* (p1->y - p2->y) == ((p3->y - p2->y) * (p1->x - p2->x))))
return 0;
else
return 1;
}
和:[geometry.h]
#ifndef geometry.h
#define geometry.h
#endif
#include "geometry.c"
extern int colinear(struct point *p1, struct point *p2, struct point *p3);
使用调试器: "C2011: 'point': 'struct' 类型重新定义".
错误在哪里?
无需定义3次
struct point {
int x;
int y;
} p1;
struct point {
int x;
int y;
} p2;
struct point {
int x;
int y;
} p3;
只定义一次,随意创建变量。
struct point {
int x;
int y;
};
struct point p1,p2,p3;
另一个答案很好地解决了这个问题。 (即为什么代码导致 multiply defined 编译器错误。)但作为对更正代码的可能增强,以下是使用 typedef
struct
。这可能会使您需要做的一些事情更容易传递和操作结构成员值:
typedef struct {
int x;
int y;
} point_s;
point_s p[3];
这有效地允许原型:
int colinear(struct point* p1, struct point* p2, struct point* p3) {
重构为:
int colinear(point_s *p) { //where p is an pointer to 3 instances of point_s
用法示例:
int main(void)
{
point_s p[3] = {{4,6}, {-2, 5}, {-0.4, 15}};
int result = colinear(p);
return 0;
}
int colinear(point_s *p)
{
if (((p[0].x - p[1].x)* (p[0].y - p[1].y) == ((p[2].y - p[1].y) * (p[0].x - p[1].x))))
{
return 0;
}
else
{
return 1;
}
}