C语言 定义结构体 作为函数参数 总是报错显示 unknown typename 编译器是Codeblocks
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言 定义结构体 作为函数参数 总是报错显示 unknown typename 编译器是Codeblocks相关的知识,希望对你有一定的参考价值。
鄙人刚刚开始学C语言,按照课件照葫芦画瓢用typdef搞出了两个结构体,然后跑的时候总是显示error: unknown typename 'carte_t',不是前面typdef已经声明过carte_t 了吗,(因为老师说一定要用指针,所以我底下又搞了个 *list)现在已经搞了很久了,就是报错。
题目大意平面内一点的表示方法,然后就是定义两个结构体,然后数据转换,总之是很简单的坐标转换。‘
本人刚入门,水平有限。
#include <stdio.h>
#include <stdlib.h>
#include<math.h>
void convert(carte_t *list);
typedef struct carte
double x;
double y;
carte_t;
typedef struct polar
double l;
double i;
polar_t;
int main()
carte_t* list = malloc(sizeof(carte_t));
*list =(carte_t)3,0.8;
convert(*list);
printf("%g %g\n",list->x,list->y);
return 0;
void convert(carte_t *list)
polar_t* newlist = malloc(sizeof(polar_t));
newlist->l=pow((pow(list->x,2)+pow(list->y,2)),0.5);
newlist->i = atan2(list->y,list->x);
printf("%g %g",newlist->l,newlist->i);
需要将函数定义在结构体之后!
以下修改
#include <stdio.h>
#include <stdlib.h>
#include<math.h>
typedef struct carte
double x;
double y;
carte_t;
typedef struct polar
double l;
double i;
polar_t;
void convert(carte_t *list);//定义在这
int main()
carte_t* list = malloc(sizeof(carte_t));
*list =(carte_t)3,0.8;
convert(*list);
printf("%g %g\\n",list->x,list->y);
return 0;
void convert(carte_t *list)
polar_t* newlist = malloc(sizeof(polar_t));
newlist->l=pow((pow(list->x,2)+pow(list->y,2)),0.5);
newlist->i = atan2(list->y,list->x);
printf("%g %g",newlist->l,newlist->i);
还有一些其他的错误,我就不点出来了!只是帮你看了error: unknown typename 'carte_t'这个问题
参考技术A 1. 函数原型声明语句void convert(carte_t *list);
要移到 carte_t 类型定义之后
2. 不能这样为list所指的对象赋值:
*list =(carte_t)3,0.8;
可改为:
list->x=3;
list->y=0.8;
3.调用函数convert的参数类型不对
convert(*list);
应改为
convert(list);本回答被提问者采纳
以上是关于C语言 定义结构体 作为函数参数 总是报错显示 unknown typename 编译器是Codeblocks的主要内容,如果未能解决你的问题,请参考以下文章
C 语言结构体 ( 结构体 数组 作为函数参数 | 数组 在 栈内存创建 )