我有三个文件:
vector2d.h
引用我的功能。
vector2d.c
定义我的功能。
test_vectors.c
作为主文件。
test_vectors.c
无法构建,因为它为每个函数返回未定义的引用错误。
我正在使用 geany,我不一定有一个终端可以写入任何内容,只需一个构建和运行按钮。
vector2d 标题
typedef struct {
double x;
double y;
} vec2d;
void display_vector(const vec2d v);
double magnitude(const vec2d v);
vec2d add(const vec2d v1, const vec2d v2);
vec2d scale(const vec2d v, const double factor);
double dot_product(const vec2d v1, const vec2d v2);
vector2d C 文件
#include "vector2d.h"
#include <stdio.h>
#include <math.h>
void display_vector(const vec2d v){
printf("%.2f, %0.2f", v.x, v.y);
}
double magnitude(const vec2d v){
double result = sqrt((v.x*v.x) + (v.y * v.y));
return result;
}
vec2d add(const vec2d v1, const vec2d v2){
vec2d result;
result.x = v1.x + v2.x;
result.y = v1.y + v2.y;
return result;
}
vec2d scale(const vec2d v, const double factor){
vec2d result;
result.x = v.x * factor;
result.y = v.y * factor;
return result;
}
double dot_product(const vec2d v1, const vec2d v2){
double result = (v1.x * v2.x) + (v1.y * v2.y);
return result;
}
test_vectors 文件
#include <stdio.h>
#include "vector2d.h"
int main (void){
int choice;
vec2d v1, v2, result;
double factor, dot;
do {
printf("1) Add vectors; 2) Scale vector; 3) Dot product; 4) Exit: ");
scanf("%d", &choice);
switch(choice){
case 1:
printf("Enter vector 1 (x, y): ");
scanf("(%lf, %lf)", &v1.x, &v1.y);
printf("\n");
printf("Enter vector 2 (x, y): ");
scanf("(%lf, %lf)", &v1.x, &v1.y);
printf("\n");
result = add(v1, v2);
printf("Result: ");
display_vector(result);
printf("\n");
case 2:
printf("Enter vector (x, y): ");
scanf("(%lf, %lf)", &v1.x, &v1.y);
printf("\n");
printf("Enter scaling factor: ");
scanf("%lf", &factor);
printf("\n");
result = scale(v1, factor);
printf("Result: ");
display_vector(result);
printf("\n");
case 3:
printf("Enter vector 1 (x, y): ");
scanf("(%lf, %lf)", &v1.x, &v1.y);
printf("\n");
printf("Enter vector 2 (x, y): ");
scanf("(%lf, %lf)", &v1.x, &v1.y);
printf("\n");
dot = dot_product(v1, v2);
printf("Result: %f\n", dot);
case 4:
printf("Bye!");
break;
}
} while(1);
return 0;
}
我尝试将函数原型放入
test_vectors.c
中,但这显然没有帮助。我似乎无法使用这个 geany IDE 正确链接它们。
通过 GCC
gcc test_vectors.c vector2d.c -o prgm
运行代码编译得很好,因此支撑 geany 的构建系统完全有可能错误地识别了其构建步骤中的目标内容。我会环顾(或谷歌)它正在构建哪些文件,并确保它是test_vectors.c
和vector2d.c
,对于您所有的担忧,头文件作为构建提及并不重要。
附注我显然不知道你的技能水平,但我建议用以下内容开始头文件:
#ifndef FILE_NAME
#define FILE_NAME
#endif
结束文件。祝你好运!