C++继承的结构

Ric*_*xie 1 c++ inheritance struct

我试图装饰节点结构,以允许单/双链表.我有以下代码:

    struct node
    {           
        Object* obj;
    };

    struct BasicNode: node
    {
            node* next;
    };
Run Code Online (Sandbox Code Playgroud)

当我使用以下代码时,我收到一个错误:

temp->next = new BasicNode;
    temp = temp->next;
Run Code Online (Sandbox Code Playgroud)

我把头定义为node* head;

编译器给我以下错误:"struct ListAsSLL::node has no member 'next'"在我的temp->next行.

我做错了什么?或者我做错的结构继承?感谢您的时间和帮助.

Som*_*ken 7

head是类型的BasicNode.BasicNode继承node这意味着如果你想分配给head至少需要一个BasicNode不是这里的情况.如果您知道temp类型BasicNode并且想要使用它,则需要显式转换(称为向下转换,父类到子类):

head = static_cast<BasicNode*>(temp);
Run Code Online (Sandbox Code Playgroud)

然而,向上转换(从子类到父类)不需要显式转换.例如,如果您改为使用head某种类型,则node不必强制转换它.而且由于您只是访问obj,这可能是您想要的.

node* head = //something..;

//later on..
node* temp = new BasicNode;
temp->obj = nl;
head = temp;
Run Code Online (Sandbox Code Playgroud)

然后,如果您仍然知道head包含派生对象,就像BasicNode您可以再次显式地再次抛出它一样:

BasicNode* basicNode = static_cast<BasicNode*>(head);
Run Code Online (Sandbox Code Playgroud)