标题:调用结构体函数的问题
只看楼主
Feiyiyi1
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2017-10-22
结帖率:62.5%
已结贴  问题点数:6 回复次数:4 
调用结构体函数的问题
程序代码:
#include<stdio.h> 
#include<string.h>
void swap(struct student *a, struct student *b) {
    struct student tmp;
    tmp= *a;
    *a = *b;
    *b = tmp;
} 
struct student
{
    char name[16];
    unsigned char age;
    unsigned char score;
    char classes[100];
};
int main()
{
    struct student st[10] = { {"fei",12,66,"c++"} ,{"yuan",13,77,"hph"}, 
       {"xu",13,44,"jave"}, {"fan",12,33,"c#"}, {"xun",23,44,"pathy"} };
    int i;
    int j;
    for (i = 0; i < 5; i++) {
        for (j = 1; j < 5 - i; j++) {
            if (st[j].age < st[j - 1].age) {
                swap(&st[j], &st[j - 1]);
            }
        }
    }
    for (i = 0; i < 5; i++) {
        printf("name:%5s,age:%5d,score:%5d,classes:%5s\n", st[i].name, 
                                st[i].age, st[i].score, st[i].classes);
    }
    getchar();
    return 0;
}


出现的问题是:
严重性    代码    说明    项目    文件    行
错误    C2079    “tmp”使用未定义的 struct“student”    Project2    e:\qt\c++qt\project2\project2\源.cpp    4
严重性    代码    说明    项目    文件    行
错误    C2582    “operator =”函数在“student”中不可用    Project2    e:\qt\c++qt\project2\project2\源.cpp    6
严重性    代码    说明    项目    文件    行
错误    C2582    “operator =”函数在“student”中不可用    Project2    e:\qt\c++qt\project2\project2\源.cpp    7
严重性    代码    说明    项目    文件    行
错误    C2440    “=”: 无法从“student”转换为“int”    Project2    e:\qt\c++qt\project2\project2\源.cpp    5
麻烦大家了
搜索更多相关主题的帖子: struct student age c++ qt 
2018-05-12 21:32
dzy123
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:5
帖 子:379
专家分:820
注 册:2013-4-18
得分:2 
把定义结构和函数交换位置
2018-05-12 22:20
邹阳
Rank: 6Rank: 6
等 级:侠之大者
威 望:4
帖 子:124
专家分:402
注 册:2015-10-8
得分:2 
需要把结构体和swap()函数调换一下位置,代码执行的顺序是从上到下,从左到右的(当然,这不是逻辑顺序,逻辑顺序的话从main函数开始执行)。那么,按照这个顺序你会发现swap()中的两个结构体形参类型不明。因为结构体类型是在接下来才有定义的。

I'm a new comer
2018-05-13 14:21
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
得分:2 
以下是引用邹阳在2018-5-13 14:21:29的发言:

需要把结构体和swap()函数调换一下位置,代码执行的顺序是从上到下,从左到右的(当然,这不是逻辑顺序,逻辑顺序的话从main函数开始执行)。那么,按照这个顺序你会发现swap()中的两个结构体形参类型不明。因为结构体类型是在接下来才有定义的。

和执行顺序无关
这里只是单纯的语法限制

https://zh.
2018-05-14 10:40
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
得分:0 
以下是引用邹阳在2018-5-13 14:21:29的发言:

需要把结构体和swap()函数调换一下位置,代码执行的顺序是从上到下,从左到右的(当然,这不是逻辑顺序,逻辑顺序的话从main函数开始执行)。那么,按照这个顺序你会发现swap()中的两个结构体形参类型不明。因为结构体类型是在接下来才有定义的。

函数形参没问题
这里出错的是函数内部定义的tmp

https://zh.
2018-05-14 10:46



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-486877-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.031363 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved