首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >隐式转换

隐式转换
EN

Stack Overflow用户
提问于 2010-01-27 13:21:43
回答 2查看 241关注 0票数 0

我的节目是:-

代码语言:javascript
复制
#include < iostream.h>
#include < conio.h>

struct base
{
  protected:

    void get()
    {
        cin>>a>>b;
    }

  public:

    base(int i=0, int j=0);

    void put()
    {
        cout << a << '\t' << b << "\tput 1";
    }

    int a,b,c;

    ~base()
    {
        cout << "base destroyed";
    }
};

class deri : protected base
{

    int c,d;
    char w;
    int ans;

  public:

    deri(int r=7, int s=0)
      : base(r,s)
    {
        c=r;
        d=s;
        cout << "\nDerived invoked\n";
    }

    void put()
    {
        cout << c << '\t' << d << '\t' << a << '\t' << b;
    }
};


class d2 : protected deri
{
  public:

    d2() {}
    void start();
    void add()
    {
        get(); // ERROR HERE: Implicit conversion of 'd2 *' to 'base *' not allowed

    }

    ~d2(){}
};

void d2::start()
{
    put();
}

base::base(int i, int j)
{
    a=i;
    b=j;

    cout << "\nbase invoked\n";
    cout << "Enter a,b: ";
    get();
}


void main()
{
    clrscr();
    getch();

}

有人能解释一下错误信息是什么意思吗?

EN

回答 2

Stack Overflow用户

发布于 2010-01-27 13:28:10

您可能正在使用旧的编译器,因为您包含的是<iostream.h>,而不是新的标准<iostream>,而且您没有使用命名空间std.

修复后,将行using namespace std;添加到顶部,并注释掉clrscr(),您的代码在MSVC8上编译得很好。

您有明确的理由使用protected删除吗?如果没有,我建议使用public删除。protected删除是非常复杂和不常见的事情。

票数 1
EN

Stack Overflow用户

发布于 2010-01-27 13:29:45

当您使用受保护或私有派生基类时,派生类不会被视为基类,在这种情况下,编译器将不会执行隐式类型转换。

在私有继承或受保护继承的情况下,派生类在非基类中。而在公共继承的情况下,每个派生类都是一个基类。

在函数中尝试显式类型转换,或者使继承公开。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2147077

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档