我正在尝试修饰节点结构以允许单/双链表。我有以下代码:
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
。
我做错了什么?或者我做错的结构继承? 感谢您的时间和帮助。
答案 0 :(得分:7)
head
的类型为BasicNode
。 BasicNode
继承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...;