gpt4 book ai didi

c - 在 main 中使用头文件中的结构(在 C 中)

转载 作者:行者123 更新时间:2023-11-30 19:59:50 25 4
gpt4 key购买 nike

我有以下头文件:

#ifndef COMPLEX_H_INCLUDED
#define COMPLEX_H_INCLUDED

typedef struct {
double r; //real part
double i; //imag part
} complex;

complex make(double r,double i);

#endif // COMPLEX_H_INCLUDED

和.c文件:

#include <stdio.h>
#include <math.h>
#include "complex.h"

complex make(double re,double im)
{
complex z;
z.r=re;
z.i=im;
return z
}

现在,当我尝试在主文件中创建复数时,我似乎无法打印我创建的复数。

#include <stdio.h>
#include <stdlib.h>
#include "complex.h"

int main()
{
double a,b;
printf("Enter real, then imaginary part:");
scanf("%f %f",a,b);

complex z;
z=make(a,b);

printf("The number is: %f%+fi",z.r,z.i);
return 0;
}

我收到错误: undefined reference 。

最佳答案

“ undefined reference ”错误是由于您没有将编译 complex.c 生成的 oobject 文件链接到可执行文件中。您需要将其添加到链接命令行或项目设置中,具体取决于您的开发方式。我们有一个常见问题解答,详细讨论了链接的这方面问题:What is an undefined reference/unresolved external symbol error and how do I fix it? (常见问题解答适用于 C++,但这部分链接在 C 中是相同的)。

<小时/>

除此之外,您的代码还存在以下问题:

在启用警告的情况下进行构建(您应该始终始终这样做)会从您的代码中生成这些警告(以及其他警告):

main.cpp: In function 'main':

main.cpp:28:13: warning: format '%f' expects argument of type 'float *', but argument 2 has type 'double' [-Wformat=]
scanf("%f %f",a,b);
~^ ~
main.cpp:28:16: warning: format '%f' expects argument of type 'float *', but argument 3 has type 'double' [-Wformat=]
scanf("%f %f",a,b);
~^ ~

[Live example]

您在需要 float* 的地方传递了 double,因此程序具有未定义的行为(并且,如上面的实时示例所示,很可能会崩溃) )。

正确的形式是使用指针作为参数,并使用正确类型的格式说明符(lf 表示 double):

scanf("%lf %lf",&a,&b);

[Live example]

关于c - 在 main 中使用头文件中的结构(在 C 中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52736170/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com