| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 657 人关注过本帖
标题:请大家帮忙,编了好几个小时了,都不行,
只看楼主 加入收藏
dayer_miss
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2010-5-17
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:8 
请大家帮忙,编了好几个小时了,都不行,
求高人帮忙,编译老出现cannot access private member declared in class 'student'和see declaration of 'studentnumber'
我用对象指针也不能访问私有成员啊
对象指针要等对象赋了值才可以指向对象吗?



class student  
{
private:
    int studentnumber;
    char name[30];
    char studentday[30];
    char class1[30];
    char p[30];//专业

public:
   
    student();
    student(int x,char a[],char b[],char c[],char d[]);
    virtual ~student();
    void SetInfo();
    void Show();
};














#include "student.h"

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
#include <string.h>
#include<iostream.h>

student::student()
{

}
student::student(int x,char a[],char b[],char c[],char d[])
{
 studentnumber=x;
 strcpy(a,name);
 strcpy(b,class1);
 strcpy(c,studentday);
 strcpy(d,p);
}

student::~student()
{

}

void student::SetInfo()
{
 cout << "ad";
}

void student::Show()
{
    cout << name <<endl << class1 <<endl <<p<<endl<<studentday<<endl<<studentnumber<<endl;
}




int main()
{
  student A[20],*p;
  int secondnum;
  int b;
  int i=0;
  char c[20],d[20],e[20],f[20];
  
  cout<<" -学生信息管理系统-"<<endl<<endl;
  cout<<"1----学生基本信息录入  2----学生信息查询"<<endl;
  cout<<"3----学生信息修改 ";
  cout<<"0----退出"<<endl;
  cin >> secondnum ;cout <<endl;

  
 switch(secondnum)
 {
 case 0:return 0;break;
 case 1:
     {  
         
         cout <<"请输入学号:";
         cin>>b ;
         cout<<endl<<"请输入姓名: ";
         cin>> c[20];
         cout <<endl;
         cout <<"请输入班级: ";
         cin >>d[20];
         cout <<endl;
         cout << "请输入出生年月: ";
         cin >>e[20];
         cout <<endl;
         cout <<"请输入专业:";
         cin>>f[20];
         cout <<endl;
         A[i].student::student(b,c,d,e,f);
         p=A;
         i++;
         
     };break;
 case 2:
     {
         int number2;
         int n=0;
         cout <<"请输入学生学号:"<<endl;
         cin>> number2;
         while(number2==p->studentnumber)
         {
             p++;
         }
         A[n].Show();break;
     }
 case 3:
     {
         A[1].SetInfo();
     };break;
 
 default: cout << "wrong";break;
 }
 return 0;
}
搜索更多相关主题的帖子: class void declared private public 
2010-05-17 10:35
lintaoyn
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:4
帖 子:606
专家分:2499
注 册:2009-4-8
收藏
得分:5 
A[i].student::student(b,c,d,e,f);//构造函数是你声明一个对象时,这个对象它自己调用的吧。按照你的意图,你可以自己再声明一个成员函数。该成员函数能现实对数据的重新赋值。
while(number2==p->studentnumber)//这个就是不能访问私有成员,studentnumber是私有的。
cin>> c[20];
         cout <<endl;
         cout <<"请输入班级: ";
         cin >>d[20];
         cout <<endl;
         cout << "请输入出生年月: ";
         cin >>e[20];
         cout <<endl;
         cout <<"请输入专业:";
         cin>>f[20];//还有这些虽然能通过编译,但和你要的结果不一样吧,改成cin>>d;cin>>e;cin>>f;

迭代的是人,递归的是神。
2010-05-17 11:28
dayer_miss
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2010-5-17
收藏
得分:0 
回复 2楼 lintaoyn
我加上了一段测试数据
A[40]=student(2009001,"张立","09级3班","91/4/3","会计");
  A[41]=student(2009002,"李明","09级3班","91/5/6","会计");
  A[42]=student(2009003,"王波","09级3班","91/7/3","会计");
  A[43]=student(2009004,"陈伟","09级3班","91/4/3","会计");

但是运行后,内存错误
这是为啥






int main()
{
  student A[50],*p;
  
  int secondnum;
  int b;
  int i=0;
  int L=0;
  char c[40],d[40],e[40],f[40];
  A[40]=student(2009001,"张立","09级3班","91/4/3","会计");
  A[41]=student(2009002,"李明","09级3班","91/5/6","会计");
  A[42]=student(2009003,"王波","09级3班","91/7/3","会计");
  A[43]=student(2009004,"陈伟","09级3班","91/4/3","会计");
  
  cout<<" -学生信息管理系统-"<<endl<<endl;
  cout<<"1----学生基本信息录入  2----学生信息查询"<<endl;
  cout<<"3----学生信息修改 ";
  cout<<"0----退出"<<endl;
  cin >> secondnum ;cout <<endl;

  
 switch(secondnum)
 {
 case 0:return 0;break;
 case 1:
     {  
         
         cout <<"请输入学号:";
         cin>>b ;
         cout<<endl<<"请输入姓名: ";
         cin>> c[20];
         
         cout <<endl <<"请输入班级: ";
         cin >>d[20];
         cout <<endl;
         cout << "请输入出生年月: ";
         cin >>e[20];
         cout <<endl;
         cout <<"请输入专业:";
         cin>>f[20];
         cout <<endl;
         A[i].student::student(b,c,d,e,f);
         p=A;
         i++;
         
     };break;
 case 2:
     {
         int number2;
         int n=0;
         cout <<"请输入学生学号:"<<endl;
         cin>> number2;
         while(number2==A[L].getnum())
         {
             L++;
         }
         A[n].Show();break;
     }
 case 3:
     {
         A[1].SetInfo();
     };break;
 
 default: cout << "wrong";break;
 }
 return 0;
}
2010-05-17 12:06
最近不在
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:5
帖 子:204
专家分:842
注 册:2010-2-28
收藏
得分:10 
strcpy(a,name);
strcpy(b,class1);
strcpy(c,studentday);
strcpy(d,p);
你的strcpy里德参数写反了!另外建议你在类里面定义一个菜单命令成员函数,这样对数据可操作性容易很多,这样main里通过对象调用就好了,不会导致mian的代码量过多。另外你的菜单,貌似只能执行一次,建议在外层嵌套一个while(1)什么的,可以多次执行。
2010-05-17 12:47
dayer_miss
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2010-5-17
收藏
得分:0 
回复 4楼 最近不在
什么叫菜单命令成员函数啊?
2010-05-17 13:04
最近不在
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:5
帖 子:204
专家分:842
注 册:2010-2-28
收藏
得分:5 
student::InputDate()
{
    1.添加...
    2.......
    3.......
    while(1)
    {
        switch()
        {
        }
    }
}
2010-05-17 13:30
lintaoyn
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:4
帖 子:606
专家分:2499
注 册:2009-4-8
收藏
得分:0 
char c[20];
cin>> c[20];
你这样写可以得到你要的结果么?

迭代的是人,递归的是神。
2010-05-17 13:48
dayer_miss
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2010-5-17
收藏
得分:0 
回复 7楼 lintaoyn
出了问题吗?我新手看不懂
2010-05-17 19:41
dayer_miss
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2010-5-17
收藏
得分:0 
回复 6楼 最近不在
谢谢
2010-05-17 19:41
快速回复:请大家帮忙,编了好几个小时了,都不行,
数据加载中...
 
   



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

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