链接头文件仍然会导致未定义的引用

问题描述 投票:0回答:1

我有三个文件:

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 正确链接它们。

c geany
1个回答
0
投票

通过 GCC

gcc test_vectors.c vector2d.c -o prgm
运行代码编译得很好,因此支撑 geany 的构建系统完全有可能错误地识别了其构建步骤中的目标内容。我会环顾(或谷歌)它正在构建哪些文件,并确保它是
test_vectors.c
vector2d.c
,对于您所有的担忧,头文件作为构建提及并不重要。

附注我显然不知道你的技能水平,但我建议用以下内容开始头文件:

#ifndef FILE_NAME

#define FILE_NAME

[“文件名”实际上可以是任何内容,但最常见的是文件名] 然后以
#endif
结束文件。祝你好运!

© www.soinside.com 2019 - 2024. All rights reserved.