C++ 是否可以指定基类';s结构到dervied类';s结构

C++ 是否可以指定基类';s结构到dervied类';s结构,c++,struct,instantiation,C++,Struct,Instantiation,我有一个以struct作为成员的类A和另一个继承类A的类B,类B的struct继承类A的struct class A { public: struct st { int x; int y; }; }; class B : public A { public: struct st : A::st { int z; }; }; 下面的代码给了我一个错误:做这件事的方法是什么 B::st* obj =

我有一个以struct作为成员的类A和另一个继承类A的类B,类B的struct继承类A的struct

class A
{
public:
    struct st
    {
        int x;
        int y;
    };
};

class B : public A
{
public:
    struct st : A::st
    {
        int z;
    };
};
下面的代码给了我一个错误:做这件事的方法是什么

B::st* obj = NULL; 

obj = new A::st [10]; 

您尝试的是错误的,因为
B::st
A::st
的子类型。因此,指向
a::st
的指针无法自动转换为
B::st
类型的指针

出于同样的原因,您不能使用:

B* bPtr = new A;
你可以反过来做

A::st* obj = NULL; 
obj = new B::st;  // Don't use the array new. That is going to be problematic. 

您尝试的是错误的,因为
B::st
A::st
的子类型。因此,指向
a::st
的指针无法自动转换为
B::st
类型的指针

出于同样的原因,您不能使用:

B* bPtr = new A;
你可以反过来做

A::st* obj = NULL; 
obj = new B::st;  // Don't use the array new. That is going to be problematic. 

您可以执行相反的操作,即创建一个新的B对象并将其指定给a对象(在这种情况下,您只能看到特定于a的字段)。当你把一个A对象分配给一个B对象时,B对象是无效的(除非你重载了赋值操作符来做一些有效的事情),因为B特定的字段是未知的。我的意思是在这样一个分配之后z的值应该是什么?这相当于
A::st A[10];B::st*obj=a。即使您反转转换,使其进行类型检查–
B::stb[10];A::st*A=b–这将是错误的。您可以执行相反的操作,即创建一个新的B对象并将其分配给a对象(在这种情况下,您只能看到特定于a的字段)。当你把一个A对象分配给一个B对象时,B对象是无效的(除非你重载了赋值操作符来做一些有效的事情),因为B特定的字段是未知的。我的意思是在这样一个分配之后z的值应该是什么?这相当于
A::st A[10];B::st*obj=a。即使您反转转换,使其进行类型检查–
B::stb[10];A::st*A=b
–这将是错误的。如果要使用数组,请使用
B::st*
而不是
A::st*
。如果要使用数组,请使用
B::st*
而不是
A::st*