C++ c++;自动';输入cast';转换

C++ c++;自动';输入cast';转换,c++,types,casting,C++,Types,Casting,有人能解释一下为什么下面的代码在出错时不编译吗 Error 1 error C2243: 'type cast' : conversion from 'Der *' to 'Base *' exists, but is inaccessible d:\users\lzizva\documents\mta\c++\projects\temp1\17022014.cpp 50 1 temp1 Error 2 error C2243: 'type cast' : conve

有人能解释一下为什么下面的代码在出错时不编译吗

Error   1   error C2243: 'type cast' : conversion from 'Der *' to 'Base *' exists, but is inaccessible  d:\users\lzizva\documents\mta\c++\projects\temp1\17022014.cpp   50  1   temp1
Error   2   error C2243: 'type cast' : conversion from 'Der *' to 'Base *' exists, but is inaccessible  d:\users\lzizva\documents\mta\c++\projects\temp1\17022014.cpp   51  1   temp1
    3   IntelliSense: conversion to inaccessible base class "Base" is not allowed   d:\users\lzizva\documents\mta\c++\projects\temp1\17022014.cpp   50  12  temp1
    4   IntelliSense: conversion to inaccessible base class "Base" is not allowed   d:\users\lzizva\documents\mta\c++\projects\temp1\17022014.cpp   51  14  temp1
我认为,当存在私有继承时,子类会获得所有属性和方法,并将它们设置为私有,它只会影响子类的子类。 我错过了什么? 编译器实际上做什么

提前感谢,, 利隆

#包括
使用名称空间std;
阶级基础
{
int n;
基地*下一个;
公众:
Base(int n,Base*next=NULL):n(n),next(next)
{}
虚空打印()常量
{

cout问题在于构造
2
3
Der
构造函数采用
Base*
,但您正在传递
Der*
指针


由于
Der
私有派生自
Base
,因此
Der
->
Base
转换在
main()
中是不可访问的,因此会出现错误。

尽管基类型和派生类型之间存在紧密耦合,私有继承是“has-a”关系,而不是“is-a”。它确实适合于继承实现,而不是接口,而且正如您所发现的,它不能用于多态性,因为对基类型的引用或指针不能绑定到派生类型的实例

当你打这个电话的时候

Der two(2, &one);
您正试图将
&one
,一个
派生的*
绑定到一个
基*

有关私有继承的更多信息,请参见

Der two(2, &one);