【发布时间】:2021-06-08 17:16:46
【问题描述】:
只是一个简单的程序,但我不断收到此编译器错误。我正在使用 MinGW 作为编译器。
这是头文件,point.h:
//type for a Cartesian point
typedef struct {
double x;
double y;
} Point;
Point create(double x, double y);
Point midpoint(Point p, Point q);
这里是 point.c:
//This is the implementation of the point type
#include "point.h"
int main() {
return 0;
}
Point create(double x, double y) {
Point p;
p.x = x;
p.y = y;
return p;
}
Point midpoint(Point p, Point q) {
Point mid;
mid.x = (p.x + q.x) / 2;
mid.y = (p.y + q.y) / 2;
return mid;
}
这就是编译器问题的来源。我不断得到:
testpoint.c: 对'create(double x, double y)'的未定义引用
虽然它是在 point.c 中定义的。
这是一个名为 testpoint.c 的单独文件:
#include "point.h"
#include <assert.h>
#include <stdio.h>
int main() {
double x = 1;
double y = 1;
Point p = create(x, y);
assert(p.x == 1);
return 0;
}
我不知道问题可能是什么。
【问题讨论】:
-
你能发布你的makefile吗?此外,您定义了 2 个主要功能,这不太好。
-
可能是
main()的重新定义,它是您程序的入口点。摆脱point.c中的那个 -
@upswimsdn,是因为 main() 的双重定义吗?
-
是的,这是我遇到的另一个问题,但主要问题是没有使用“gcc testpoint.c point.c”将两个文件编译在一起(请参阅接受的答案)。
标签: c function linker-errors undefined-reference