C语言错误解析---关于结构体问题

问题描述:error C2224: left of ‘.err‘ must have struct/union type

分三块来讲述:
  1 首先://注意在C和C++里不同
    在C中定义一个结构体类型要用typedef:
    typedef struct Student
    {
    int a;
    }Stu;
    于是在声明变量的时候就可:Stu stu1;(如果没有typedef就必须用struct Student stu1;来声明)
    这里的Stu实际上就是struct Student的别名。Stu==struct Student
    另外这里也可以不写Student(于是也不能struct Student stu1;了,必须是Stu stu1;)
    typedef struct
    {
    int a;
    }Stu;
    但在c++里很简单,直接
    struct Student
    {
    int a;
    };    
    于是就定义了结构体类型Student,声明变量时直接Student stu2;
======================================================================================

  2.其次:
    在c++中如果用typedef的话,又会造成区别:
    struct   Student   
    {   
    int   a;   
    }stu1;//stu1是一个变量

    typedef   struct   Student2   
    {   
    int   a;   
    }stu2;//stu2是一个结构体类型=struct Student

    使用时可以直接访问stu1.a
    但是stu2则必须先   stu2 s2;
    然后               s2.a=10;
======================================================================================

  3 掌握上面两条就可以了,不过最后我们探讨个没多大关系的问题
    如果在c程序中我们写:
    typedef struct  
    {
    int num;
    int age;
    }aaa,bbb,ccc;
    这算什么呢?
    我个人观察编译器(VC6)的理解,这相当于
    typedef struct  
    {
    int num;
    int age;
    }aaa;
    typedef aaa bbb;
    typedef aaa ccc;
    也就是说aaa,bbb,ccc三者都是结构体类型。声明变量时用任何一个都可以,在c++中也是如此。但是你要注意的是这个在c++中如果写掉了typedef关键字,那么aaa,bbb,ccc将是截然不同的三个对象。

    //此处不是很理解。

  

    typedef struct和struct的区别:

    typedef struct tagMyStruct
    { 
     int iNum;
     long lLength;
    } MyStruct;

    上面的tagMyStruct是标识符,MyStruct是变量类型(相当于(int,char等))。

    这语句实际上完成两个操作:

      1) 定义一个新的结构类型

    struct tagMyStruct
    {   
     int iNum; 
     long lLength; 
    };

  分析:tagMyStruct称为“tag”,即“标签”,实际上是一个临时名字,不论是否有typedefstruct 关键字和tagMyStruct一起,构成了这个结构类型,这个结构都存在。

  我们可以用struct tagMyStruct varName来定义变量,但要注意,使用tagMyStruct varName来定义变量是不对的,因为struct 和tagMyStruct合在一起才能表示一个结构类型。

问题解决:原先写成了 struct_pid{

}pid;

改为struct pid{

}pid;即可,另外按照上面的解决方法,在vc++6.0中还是错误

时间: 2024-10-12 14:47:36

C语言错误解析---关于结构体问题的相关文章

c语言错误解析

问题描述:在vc6++syntax error : missing ';' before 'type' int main(){ printf("Systembegin\n"); PID_init(); int count=0; 如上 在VC中编译c程序,在一个大括号括起的范围内,如果变量声明放在了函数调用的后面,那么编译的时候就会报错:syntax error : missing ';' before 'type' 然后你可以修改为把变量声明放在函数调用之前.就会顺利通过编译. 这个问

GCC 常见错误解析

1GCC 常见错误解析一.错误类型第一类∶C 语法错误错误信息∶文件source.c 中第n 行有语法错误(syntex errror).这种类型的错误,一般都是 C 语言的语法错误,应该仔细检查源代码文件中第n 行及该行之前的程序,有时也需要对该文件所包含的头文件进行检查.有些情况下,一个很简单的语法错误,gcc 会给出一大堆错误,此时要保持清醒的头脑,不要被其吓倒,必要的时候再参考一下C 语言的基本教材.第二类∶头文件错误错误信息∶找不到头文件head.h(Can not find incl

Linux C语言下TCP传结构体

1.废话不多说,本文介绍的是Linux下C语言实现TCP传递结构体数据: a.TCP Server一直在等待接收数据 b.TCP Client发送结构体数据 c.TCP Server接收数据并解析出来 2.结构体介绍: a.实际上要发送的结构体是: struct TCP_STRUCT_DATA{int m_cmd;//命令 可以用宏定义或者枚举区分不同的命令int m_data_len;//要发的数据的长度char *data;//要发的数据}DATA_SEND, *PDATA_SEND; b.

黑马程序员-------------C语言流程控制-选择结构

流程控制 c语言中有3中结构控制程序运行1> 顺序结构:默认的流程结构,按照书写的顺序执行每一条语句2> 选择结构:对给定的条件进行判断,在根据判断结果来决定来执行哪一段代码3> 循环结构:在给定条件成立的情况下,反复执行某一段代码 1.选择结构 if语句 1>if的第一种结构 if(条件){//条件成立就会执行下面语句 语句1: 语句2: ....... } 例子: #include <stdio.h> int main (){ //人数 int cout = 0;

C语言函数与程序结构

title : C语言函数与程序结构 tags : C语言作用域规则 , 外部变量 ,静态变量 ,寄存器变量,宏定义 grammar_cjkRuby: true --- 外部变量 变量声明用于说明变量的属性(类型),而变量定义还会引起存储器分配 int sp; double s[MAX]; 声明地方:函数外 如果上面的变量定义在所有函数之外,即为外部变量,并为这两个外部变量sp.s[MAX],分配储存单元以及数组的长度,在其源文件中的所有函数都可以使用这两个外部变量. extern int sp

WSL下使用VcXsrv启动chromium browser及常见错误解析 (ubuntu18.04, 图形界面)

先说结论,解决方法在最后: 启动浏览器实质是启动图形界面,推广到其他GUI程序同样适用. 目前在WSL环境下通过VcXsrv这个X server启动图形界面相对简单,但仍存在兼容性问题,配置仍需完善. 环境: win10系统安装ubuntu18.04的命令行工具(通过Microsoft Store安装) 背景: 正在阅读headfirst C(即嗨翻C语言)的P445,涉及以下关于不同系统启动特定浏览器的代码,用于启动特定浏览器: void open_url(char *url) { char

嵌入式 Linux C语言(七)——结构体

嵌入式 Linux C语言(六)--结构体 一.结构体简介 1.结构体定义 结构体定义一般有两种方法较为常用: 第一种方法: struct person{ char *name; unisgned int age; }; 第二种方法: typedef struct person{ char *name; unsigned int age; }Person; person实例声明如下: Person person;//声明一个person对象 Person *ptrPerson = (Person

OpenGL ES着色器语言之语句和结构体(官方文档第六章)内建变量(官方文档第七、八章)

OpenGL ES着色器语言之语句和结构体(官方文档第六章) OpenGL ES着色器语言的程序块基本构成如下: 语句和声明 函数定义 选择(if-else) 迭代(for, while, do-while) 跳跃(discard, return, break, continue) 6.1函数定义   着色器是由一系列全局声明和函数定义组成的.函数声明规范如下: // prototype returnType functionName (type0 arg0, type1 arg1, ...,

C语言中的程序结构

C语言中的程序结构有三种,分别是顺序结构.选择结构和循环结构. 一.按照语句的先后顺序执行的程序结构,称为顺序结构. 下面以一个求三角形面积的例子进行说明,其代码如下: 例1.1 1 #include<stdio.h> 2 int main() 3 { 4 int width,height,s; 5 printf("请输入三角形的底宽:\n"); 6 scanf("%d",&width); 7 printf("请输入三角形的高:\n&q