当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 8 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : [问题]向高手讨教个C++问题,简单dio
帖子发表于 : 2008-04-12 4:00 
头像

注册: 2007-10-25 18:45
帖子: 39
送出感谢: 0 次
接收感谢: 0 次
这是一道作业题:从键盘输入全班学生的数据,包括学号、姓名、英语成绩、高数成绩和C++成绩,并按照平均成绩的升序输出全班学生的成绩。

我的代码如下:
代码:
#include <iostream>

using namespace std;

class student
{
public:
   float average();
   void input();
   void display();
   friend void arrange(student &stud[],int count);
private:
   string name;
   int num;
   float english;
   float math;
   float cpp;
   float ave;
};

void student::input()
{
   cout<<"num:";
   cin>>num;
   cout<<"name:";
   cin>>name;
   cout<<"english:";
   cin>>english;
   cout<<"math:";
   cin>>math;
   cout<<"cpp:";
   cin>>cpp;
}

float student::average()
{
   ave=(english+math+cpp)/3;
}

void student::display()
{
   cout<<"num:"<<num<<endl;
   cout<<"name:"<<name<<endl;
   cout<<"english:"<<english<<endl;
   cout<<"matn:"<<math<<endl;
   cout<<"cpp:"<<cpp<<endl;
   cout<<"average:"<<ave<<endl;
}

void arrange(student &stud[],int count)
{
   int m,n;
   student s;
   for(m = 1;m<count;m++)
      for(n = count-1;n >= m;--n)
      {
         if(stud[n-1].ave>stud[n].ave)
         {
            s = stud[n-1];
            stud[n-1] = stud[n];
            stud[n]= s;
         }
      }
}

int main()
{
   student stud[3];
   for(int i=0;i<3;i++)
   {
      cout<<"No."<<i<<endl;
      stud[i].input();
      stud[i].average();
   }
   arrange(stud,3);
   for(int i=0;i<3;i++)
      stud[i].display();
   return 0;
}

不知道为什么用GCC总是编译不过,输出如下错误:
引用:
zz@zz-desktop:~$ gcc ./323.cpp
./323.cpp:12: 错误: ‘stud’ 声明为 array of references
./323.cpp:51: 错误: ‘stud’ 声明为 array of references
./323.cpp: In function ‘void arrange(int)’:
./323.cpp:58: 错误: ‘stud’ 在此作用域中尚未声明
./323.cpp: In function ‘int main()’:
./323.cpp:76: 错误: 从类型 ‘student*’ 到类型 ‘int’ 的转换无效
./323.cpp:51: 错误: 给予 function ‘void arrange(int)’ 的实参太多
./323.cpp:76: 错误: 在文件的这个地方

查了N久也搞不定,已经开始怀疑自己的智商,大虾救我!!!


页首
 用户资料  
 
2 楼 
 文章标题 :
帖子发表于 : 2008-04-12 10:47 

注册: 2008-03-29 19:46
帖子: 2
送出感谢: 0 次
接收感谢: 0 次
首先建议用g++编译,用gcc还要显式的加上C++的链接库
代码:
g++ -Wall student.cpp -o student

改过的几个地方:
代码:
friend void arrange(student &stud[],int count); //去掉&
float student::average()
 {
    ave=(english+math+cpp)/3;
    return ave; //添加这一句
 }
void arrange(student &stud[],int count) //去掉&
{
    int m,n;
    student s;
    for(m = 1;m<count;m++)
       for(n = count-1;n >= m;--n)
       {
          if(stud[n-1].ave>stud[n].ave)
          {
             s = stud[n-1];
             stud[n-1] = stud[n];
             stud[n]= s;
          }
       }
 }

这样没有警告且保证能运行了,但细节的地方我没有看:)
结果如下:
代码:
$./student
No.0
num:1
name:jim
english:60
math:70
cpp:80
No.1
num:2
name:lucy
english:80
math:90
cpp:90
No.2
num:3
name:john
english:49
math:95
cpp:68
num:1
name:jim
english:60
matn:70
cpp:80
average:70
num:3
name:john
english:49
matn:95
cpp:68
average:70.6667
num:2
name:lucy
english:80
matn:90
cpp:90
average:86.6667


页首
 用户资料  
 
3 楼 
 文章标题 :
帖子发表于 : 2008-04-12 12:19 
头像

注册: 2007-10-25 18:45
帖子: 39
送出感谢: 0 次
接收感谢: 0 次
呵呵,原来是这样,还是GCC用的少

平时都是用VC的,只是这次在VC上编译不过,才想用GCC试一下

形参利用数组也可以实现值传递?这点以前倒是忽略了,嘿嘿收获

不过这个代码在VC2008下面还是编译不过,提示有两个错误。一般情况下从GCC到VC需要做哪些改动?


页首
 用户资料  
 
4 楼 
 文章标题 :
帖子发表于 : 2008-04-12 12:36 
头像

注册: 2006-07-02 11:16
帖子: 12522
地址: 廣州
送出感谢: 0 次
接收感谢: 8
yjzzo0 写道:
呵呵,原来是这样,还是GCC用的少

平时都是用VC的,只是这次在VC上编译不过,才想用GCC试一下

形参利用数组也可以实现值传递?这点以前倒是忽略了,嘿嘿收获

不过这个代码在VC2008下面还是编译不过,提示有两个错误。一般情况下从GCC到VC需要做哪些改动?


不是数组可以值传递, 而是你调用函数时传过去的本来就是数组首地址指针..
你那个& 被认为是 (student & )[] 了


_________________
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。


页首
 用户资料  
 
5 楼 
 文章标题 :
帖子发表于 : 2008-04-12 23:52 
头像

注册: 2007-10-25 18:45
帖子: 39
送出感谢: 0 次
接收感谢: 0 次
引用:
你那个& 被认为是 (student & )[] 了

我是想让形参作为引用,&在这里难道不能当作引用符么?


页首
 用户资料  
 
6 楼 
 文章标题 :
帖子发表于 : 2008-04-13 20:17 
头像

注册: 2006-07-02 11:16
帖子: 12522
地址: 廣州
送出感谢: 0 次
接收感谢: 8
yjzzo0 写道:
引用:
你那个& 被认为是 (student & )[] 了

我是想让形参作为引用,&在这里难道不能当作引用符么?


不明白你干吗要传引用

它本身就是个指针, 还传引用干吗


_________________
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。


页首
 用户资料  
 
7 楼 
 文章标题 :
帖子发表于 : 2008-04-13 22:59 
头像

注册: 2007-10-25 18:45
帖子: 39
送出感谢: 0 次
接收感谢: 0 次
呵呵,对引用还不是太了解,看来是误用 :wink:


页首
 用户资料  
 
8 楼 
 文章标题 :
帖子发表于 : 2008-04-15 12:58 
头像

注册: 2006-07-02 11:16
帖子: 12522
地址: 廣州
送出感谢: 0 次
接收感谢: 8
yjzzo0 写道:
呵呵,对引用还不是太了解,看来是误用 :wink:


引用通常是出于性能考虑


_________________
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 8 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 2 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译