| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 571 人关注过本帖
标题:那位大大帮我看看这个,闹心啊
只看楼主 加入收藏
任重道远
Rank: 1
等 级:新手上路
帖 子:57
专家分:7
注 册:2015-9-12
结帖率:66.67%
收藏
已结贴  问题点数:20 回复次数:8 
那位大大帮我看看这个,闹心啊
程序代码:
//这是一个简单的c++程序,声明一个学生类,其中有名字和学号,也可以对学生的名字学号赋值

#include
#include 

using namespace std;
class student
{
public:
    char name[20];
    int number[10];
public:
    void getStudentnu(student * &nu1)
    {
        nu1 = (student *)malloc(4*sizeof(int));
        int i;
        cout << "请输入学生的学号: " ;
        for(i=0;i<4;i++)
        {
            cin >> nu1[i];           //错误发生: no match for 'operator>>' (operand types are 'std::istream {aka std::basic_istream<char>}' and 'student')|
        }
                            //当把数组名返回时,实际上是返回了数组的首地址,后续继续使用该地址指向的内存。
    }                      //如果数组为局部变量,那么按照C语言的规则,该段地址在退出函数后,会被释放,并可能被系统做其它用途,
                          //这样再继续访问该段地址就会引起不可预知错误。所以对于局部数组名是不可以返回的。
                         //而静态局部变量,开辟的空间不会在退出函数后释放,这时可以返回。
    void getStudentna(student * &na1)
    {
        na1=(student *)malloc(10*sizeof(char));
        cout << "请输入学生的姓名: " ;
        cin >> na1;           //错误发生: no match for 'operator>>' (operand types are 'std::istream {aka std::basic_istream<char>}' and 'student*')|
    }

    void printStudent(student * &s)
    {
        int i;
        cout << "学号是: " << endl;
        for(i=0;i<4;i++)
        {
            cout << s->number[i];
        }
        cout << " " << endl;
        cout << "姓名是: " << s->name << endl;
    }
};

int main()
{
    student *st;

    cout << "请输入学生的具体信息: " << endl;

    st->getStudentna(st->number);
    st->getStudentnu(st->name); //错误发生:no matching function for call to 'student::getStudentnu(char [20])'|
    st->printStudent(st);
    system("pause");
    return 0;
}
搜索更多相关主题的帖子: include 
2015-11-10 09:34
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:7 
这说的够清楚了啊, 重载 >> 方法


[fly]存在即是合理[/fly]
2015-11-10 09:50
qq1625127317
Rank: 6Rank: 6
等 级:等待验证会员
威 望:1
帖 子:185
专家分:450
注 册:2015-9-3
收藏
得分:7 
就是这种类体如果没有成员函数的话,就相当于结构体,他的赋值和结构体是一样的,不能整体赋值,cin >> nu1 ->name,,cin >> nul -> number这种的分别赋值

从前风闻有你,现在我亲眼看见你
2015-11-10 10:08
任重道远
Rank: 1
等 级:新手上路
帖 子:57
专家分:7
注 册:2015-9-12
收藏
得分:0 
回复 2楼 azzbcc
那应该怎么解决啊
2015-11-10 16:43
任重道远
Rank: 1
等 级:新手上路
帖 子:57
专家分:7
注 册:2015-9-12
收藏
得分:0 
回复 3楼 qq1625127317
有成员函数啊
2015-11-10 16:44
任重道远
Rank: 1
等 级:新手上路
帖 子:57
专家分:7
注 册:2015-9-12
收藏
得分:0 
回复 2楼 azzbcc
我觉得是给成员函数传递参数的  st->name和st->number的问题,但传递st又不对,因该怎么弄
2015-11-10 16:46
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:7 
c++,非要发到c版

总有那身价贱的人给作业贴回复完整的代码
2015-11-10 16:59
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:0 
我建议重载 >> 方法,不过这样做你的整个结构都要改

程序代码:
#include <cstring>
#include <iostream>
using namespace std;
class student
{
private:
    char name[20];
    char number[10];
public:
    student& operator=(const student &stu)
    {
        strcpy(this->name, stu.name);
        strcpy(this->number, stu.number);
        return *this;
    }
    friend inline ostream& operator<<(ostream &os, student &stu)
    {
        os << "学生的学号:" << stu.number << endl;
        os << "学生的姓名:" << stu.name << endl;
        os << endl;
        return os;
    }
    friend inline istream& operator>>(istream &is, student &stu)
    {
        is >> stu.number;
        is >> stu.name;
        return is;
    }
};
int main()
{
    student stu;
    cout << "请输入学生的具体信息: " << endl;
    cin >> stu; 

    student *pstu = &stu;
    cout << *pstu;
    return 0;
}



[此贴子已经被作者于2015-11-10 17:10编辑过]



[fly]存在即是合理[/fly]
2015-11-10 17:07
任重道远
Rank: 1
等 级:新手上路
帖 子:57
专家分:7
注 册:2015-9-12
收藏
得分:0 
回复 8楼 azzbcc
谢了
2015-11-12 14:49
快速回复:那位大大帮我看看这个,闹心啊
数据加载中...
 
   



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

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