VC 6.0有问题还是我的程序有问题

Ly_uu 2005-08-07 04:45:20
#include <iostream>
#include <string>

using namespace std;

class Stud
{
public:
Stud(int,string,float);
virtual void display();
protected:
int num;
string name;
float score;
};

Stud::Stud(int n,string nam,float s):num(n),name(nam),score(s){}

void Stud::display()
{
cout<<"Num : "<<num<<"\nName : "<<name<<"\nScore : "<<score<<endl;
}

class Grad:protected Stud
{
public:
Grad(int,string,float,float);
virtual void display();
private:
float pay;
};

Grad::Grad(int n,string nam,float s,float p):Stud(n,nam,s),pay(p){}

void Grad::display()
{
cout<<"Num : "<<num<<"\nName : "<<name<<"\nScore : "<<score<<"\nPay : "<<pay<<endl;
}

int main()
{
Stud stu(1001,"lau",90.5);
Grad grad(1002,"chen",91.5,1200);
Stud * pt=&stu;
pt->display();
pt=&grad; //编译时说"error C2243: 'type cast' : conversion from 'class Grad *' to 'class Stud *' exists, but is inaccessible"
pt->display();
return 0;
}
...全文
133 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
llf_hust 2005-08-07
  • 打赏
  • 举报
回复
#include <iostream>
#include <string>
using namespace std;

class Stud
{
public:
Stud(int,string,float);
virtual void display();
protected:
int num;
string name;
float score;
};

Stud::Stud(int n,string nam,float s):num(n),name(nam),score(s)
{
}

void Stud::display()
{
cout<<"Num : "<<num<<"\nName : "<<name<<"\nScore : "<<score<<endl;
}

class Grad:public Stud //改为public继承方式
{
public:
Grad(int,string,float,float);
void display();
private:
float pay;
};

Grad::Grad(int n,string nam,float s,float p):Stud(n,nam,s),pay(p)
{
}

void Grad::display()
{
cout<<"Num : "<<num<<"\nName : "<<name<<"\nScore : "<<score<<"\nPay : "<<pay<<endl;
}

int main()
{
Stud stu(1001,"lau",90.5);
Grad grad(1002,"chen",91.5,1200);
Stud * pt=&stu;
pt->display();
pt=&grad;
pt->display();
return 0;
}
qhfu 2005-08-07
  • 打赏
  • 举报
回复
当然可以咯
Ly_uu 2005-08-07
  • 打赏
  • 举报
回复
谢谢 我明白了
Ly_uu 2005-08-07
  • 打赏
  • 举报
回复
我找不到VC6.0的 MSDN, .NET的行吗?
qhfu 2005-08-07
  • 打赏
  • 举报
回复
Visual C++ 概念:生成 C/C++ 程序
编译器错误 C2243从“type1”到“type2”的“conversion type”转换存在,但不可访问
访问保护(protected 或 private)阻止从指向派生类的指针到指向基类的指针的转换。
示例
// C2243.cpp
class B {};
class D : private B {};

D d;
B *p = &d; // C2243


应该学会查msdn 呵呵!
Ly_uu 2005-08-07
  • 打赏
  • 举报
回复
Stud * pt=&stu;
pt->display();
pt=(Stud *)(&grad);
pt->display();

现在编译的时候不是"error" 而是"warning".

究竟为什么会出现这样的问题 和 怎样才能彻底解决呢?
sasdaa 2005-08-07
  • 打赏
  • 举报
回复
pt = (Stud *)(&grad);
Ly_uu 2005-08-07
  • 打赏
  • 举报
回复
能否讲清楚一点呢? 小弟不明白
sasdaa 2005-08-07
  • 打赏
  • 举报
回复
试试dynamic_cast
Ly_uu 2005-08-07
  • 打赏
  • 举报
回复
我找不出错误, 那里错了! 求解

64,282

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧