簡體   English   中英

C ++繼承的結構

[英]C++ Inherited Structs

我試圖裝飾節點結構,以便允許單/雙鏈表。 我有以下代碼:

    struct node
    {           
        Object* obj;
    };

    struct BasicNode: node
    {
            node* next;
    };

當我使用以下代碼時,出現錯誤:

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

我將head定義為node* head;

編譯器給我以下錯誤:在我的temp->next行中, "struct ListAsSLL::node has no member 'next'"

我做錯了什么? 還是我做結構繼承錯了? 感謝您的時間和協助。

head的類型為BasicNode BasicNode繼承了node ,這意味着如果要分配給head ,則至少需要一個BasicNode ,在這里不是這種情況。 如果您知道temp的類型為BasicNode並且要使用它,則需要顯式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* basicNode = static_cast<BasicNode*>(head);

您應該聲明head為

node* head...;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM