智能车制作

标题: 【图】声明定义【外部】结构体,格式是什么- -。 [打印本页]

作者: 恋May    时间: 2014-5-11 11:44
标题: 【图】声明定义【外部】结构体,格式是什么- -。


一个自己的.C对应一个.H 两个文件。
普通的全局变量
在.C里定义 在.H里面 申明加个extern就能在别的.C里面调用了。但是现在想对结构体做同样的处理,不知道具体格式,尝试各种放法总是提示错误= =求大神解答一下 如何 声明定义全局的结构体变量?

我的.C里定义的结构体
[attach]59667[/attach]


我的.H里声明的结构体变量
[attach]59666[/attach]


但是 总是提示.C里面 定义 那里的一个错误:
[attach]59668[/attach]

= =。

作者: allenanswerzq    时间: 2014-5-11 11:56
typedef struct PID      
{
        float vi_Set;            //速度 PID,速度设定值   
        float vi_PreError;       //速度 PID,前一次,速度误差,,vi_Ref - vi_FeedBack
        float vi_PreDerror;      //速度 PID,前一次,速度误差之差, d_error-PreDerror;
        float v_Kp;             //速度 PID,Ka = Kp
        float v_Ki;             //速度 PID,Kb = Kp * ( T / Ti )
        float v_Kd;            //速度 PID,
        float Out;             //电机控制输出值
        //float I;
        float I_Max;
        float v_Max;
        float v_Min;
}PID;
extern PID sPID;这是。H文件里的

作者: Jyoun    时间: 2014-5-11 12:07
同求……我到现在都用不好结构体,我简直就是战5渣……(>﹏<)
作者: 开灰机的灰机    时间: 2014-5-11 12:12
同求  
作者: 恋May    时间: 2014-5-11 12:24
allenanswerzq 发表于 2014-5-11 11:56
typedef struct PID      
{
        float vi_Set;            //速度 PID,速度设定值   

谢谢,但是你的我有些不明白  你在.H里面 sPID  是什么= =。

作者: allenanswerzq    时间: 2014-5-11 12:25
PID sPID;这是。c文件里的声明。看看typedef的用法你就明白了。
作者: 凌心    时间: 2014-5-11 12:30
重复定义,且类型不同。可以按2楼的方法,先声明结构体,再声明外部定义变量,然后在外部定义结构体变量。
作者: 恋May    时间: 2014-5-11 12:53
凌心 发表于 2014-5-11 12:30
重复定义,且类型不同。可以按2楼的方法,先声明结构体,再声明外部定义变量,然后在外部定义结构体变量。

谢谢,按照你说的解决了! 原来结构体需要用typedef 才可以外部使用= =没变量那么简单么。

作者: 恋May    时间: 2014-5-11 12:55
allenanswerzq 发表于 2014-5-11 11:56
typedef struct PID      
{
        float vi_Set;            //速度 PID,速度设定值   

谢谢 改好了PS:你的程序里面:
typedef struct PID      
{
        float vi_Set;            //速度 PID,速度设定值   
        float vi_PreError;       //速度 PID,前一次,速度误差,,vi_Ref - vi_FeedBack
        float vi_PreDerror;      //速度 PID,前一次,速度误差之差, d_error-PreDerror;
        float v_Kp;             //速度 PID,Ka = Kp
        float v_Ki;             //速度 PID,Kb = Kp * ( T / Ti )
        float v_Kd;            //速度 PID,
        float Out;             //电机控制输出值
        //float I;
        float I_Max;
        float v_Max;
        float v_Min;
}PID;

struct 后面那个 PID 完全可以不用写。

作者: 恋May    时间: 2014-5-11 12:55
Jyoun 发表于 2014-5-11 12:07
同求……我到现在都用不好结构体,我简直就是战5渣……(>﹏

解决了,后面有大神回复= =。

作者: 恋May    时间: 2014-5-11 12:56
开灰机的灰机 发表于 2014-5-11 12:12
同求

解决了,后面有大神回复= =。

作者: yyyzrxh    时间: 2014-5-11 12:59
晓习了
作者: 恋May    时间: 2014-5-11 13:02
网上的一些对于结构体一些 不同形式的讲解便于更好理解:

http://zhidao.baidu.com/link?url ... 1NjK0H_eMxIYGgz_eK_
作者: Jyoun    时间: 2014-5-11 13:06
恋May 发表于 2014-5-11 12:55
解决了,后面有大神回复= =。

还是不明白那个sPID……⊙▽⊙

作者: 凌心    时间: 2014-5-11 13:31
Jyoun 发表于 2014-5-11 13:06
还是不明白那个sPID……⊙▽⊙

sPID就是结构体变量。

作者: 恋May    时间: 2014-5-11 13:34
Jyoun 发表于 2014-5-11 13:06
还是不明白那个sPID……⊙▽⊙

sPID  就如: int  a;的a一样 是个变量 只是数据类型是PID

后面 调用的时候 用sPID.p  这样的。

作者: Jyoun    时间: 2014-5-11 13:59
恋May 发表于 2014-5-11 13:34
sPID  就如: int  a;的a一样 是个变量 只是数据类型是PID

后面 调用的时候 用sPID.p  这样的。

噢噢~~~thanks~~~明白了~~~

作者: wen123    时间: 2014-5-11 14:02
恋May 发表于 2014-5-11 12:53
谢谢,按照你说的解决了! 原来结构体需要用typedef 才可以外部使用= =没变量那么简单么。

这个也算是宏定义

作者: 恋May    时间: 2014-5-11 14:32
wen123 发表于 2014-5-11 14:02
这个也算是宏定义

但是和宏定义的区别是什么 网上说和宏定义 有区别 但是感觉差不多- -

作者: wen123    时间: 2014-5-11 14:54
恋May 发表于 2014-5-11 14:32
但是和宏定义的区别是什么 网上说和宏定义 有区别 但是感觉差不多- -

有区别啊,
看两个例子你就明白了:
1:a:# define INT32 int
unsigned INT32 i=10;
    b:typedef int INT32 ;
   unsigned INT32 i=10;
你会发现a不会出错,,而b会出错,,原因typedef定义的变量不支持这种类型拓展!!
2:
a:# define Pchar char *
    Pchar p1,p2;
b:typedef Pchar char *;
    Pchar p1,p2
你会发现b的p1和p2全是字符指针
而a只有p1是而p2是char型非指针

通过两个例子可以看出,,宏定义会在预编译的时候把你定义的形式给“替换”掉,而typedef定义的是一条语句(看分号就知道)不是简单的替换,,在一些底层之类的你都会发现大部分用的是typedef而不是define,



作者: 恋May    时间: 2014-5-11 16:51
wen123 发表于 2014-5-11 14:54
有区别啊,
看两个例子你就明白了:
1:a:# define INT32 int

3Q。谢了。

作者: 潮流子韩    时间: 2014-11-1 13:12

作者: 支点305    时间: 2015-1-7 16:07
allenanswerzq 发表于 2014-5-11 11:56
typedef struct PID      
{
        float vi_Set;            //速度 PID,速度设定值   

求教我的还是不行啊提示这个
redefinition;  symbol cannot be overloaded with a typedef

说是typedef不能重载什么的?

作者: 马杰    时间: 2015-4-5 17:28
allenanswerzq 发表于 2014-5-11 11:56
typedef struct PID      
{
        float vi_Set;            //速度 PID,速度设定值   

可以问问你 写好的结构体如何掉出来她的动态数据在主函数main中看到呢?





欢迎光临 智能车制作 (http://111.231.132.190/) Powered by Discuz! X3.2