C ++继承的结构

时间:2016-11-04 13:14:56

标签: c++ inheritance struct

我正在尝试修饰节点结构以允许单/双链表。我有以下代码:

    struct node
    {           
        Object* obj;
    };

    struct BasicNode: node
    {
            node* next;
    };

当我使用以下代码时,出现错误:

temp->next = new BasicNode;
    temp = temp->next;

我已将头部定义为node* head;

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

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

2 个答案:

答案 0 :(得分:7)

head的类型为BasicNodeBasicNode继承node,这意味着如果您要分配给head,则至少需要 BasicNode,而不是temp。如果您知道BasicNode类型为head = static_cast<BasicNode*>(temp); 并且您想要使用它,则需要显式强制转换(称为向下转换,父类到子类):

head

向上转换(从子类到父类)但不需要显式转换。例如,如果您将node改为obj,则不必强制转换它。由于您只访问node* head = //something..; //later on.. node* temp = new BasicNode; temp->obj = nl; head = temp; ,这可能就是您想要的。

head

然后,如果您仍然知道BasicNode包含像BasicNode* basicNode = static_cast<BasicNode*>(head); 这样的派生对象,您可以随时再次明确地再次使用它:

DesiredCapabilities capabilities = DesiredCapabilities.htmlUnit();

//set an userId header
capabilities.setCapability("id", "userId");

HtmlUnitDriver unitDriver = new HtmlUnitDriver(capabilities);

//enabled javascript
unitDriver.setJavascriptEnabled(true);

unitDriver.get("http://localhost:portNo/example/");

String pageSource = unitDriver.getPageSource();

答案 1 :(得分:0)

你应该将头部声明为

node* head...;