簡體   English   中英

成員引用基類型“elem *”不是結構或聯合 C++

[英]Member reference base type 'elem *' is not a structure or union C++

這段代碼有什么問題? 我真的不知道。 我是初學者。 對不起我的英語不好。


#include <iostream>
using namespace std;

struct elem
{
    int wartosc;
    elem* nast;
    elem* poprz;
};

class ListaDwukierunkowa
{
protected:
    elem **lista;

public:
    ListaDwukierunkowa(elem** lista)
    {
        this->lista = lista;
    }

    void dodaj_elem(int do_dodania)
    {
        if (*lista == nullptr)
        {
            *lista = new elem;
            (*lista)->wartosc = do_dodania;
            (*lista)->nast = nullptr;
            (*lista)->poprz = nullptr;
        }
        else
        {
            elem *temp = *lista;
            while (temp->nast != nullptr)
            {
                temp = temp->nast;
            }
            temp->nast = new elem;
            temp->nast->wartosc = do_dodania;
            temp->nast->nast = nullptr;
            temp->nast->poprz = temp;
        }
    }

    void wyswietl_elem()
    {
        cout << endl;
        if (lista == nullptr)
        {
            cout << "Lista jest pusta" << endl;
        }
        while (lista != nullptr)
        {
            cout << "poprz: " <<  lista->poprz << " | ten: " << lista << " | war:" << lista->wartosc << " | nast:" << lista->nast << endl;
            lista = lista->nast;
        }
    }

    void usun_elem(int do_usun)
    {
        elem *temp = *lista;
        if (*lista == nullptr)
            return;

        while (temp->wartosc != do_usun)
        {
            temp = temp->nast;
            if (temp == nullptr)
                return;
        }

        if (temp->poprz)
            temp->poprz->nast = temp->nast;
        else
            *lista = temp->nast;

        if (temp->nast)
            temp->nast->poprz = temp->poprz;

        delete temp;
    }

    int liczba_elem()
    {
        int liczba = 0;
        while (lista != nullptr)
        {
            liczba += 1;
            lista = lista->nast;
        }
        return liczba;
    }

    int liczba_elem_o_war(int x)
    {
        int liczba = 0;
        while (lista != nullptr)
        {
            if (lista->wartosc == x)
            {
                liczba += 1;
            }
            lista = lista->nast;
        }
        return liczba;
    }

    bool czy_zawiera(int x)
    {
        bool czy = false;
        while (lista != nullptr)
        {
            if (lista->wartosc == x)
            {
                czy = true;
            }
            lista = lista->nast;
        }
        return czy;
    }

    void zwolnij_liste()
    {
        while (*lista != nullptr)
        {
            elem* nast = (*lista)->nast;
            delete *lista;
            *lista = nast;
        }
        *lista = nullptr;
    }
};




int main()
{
    ListaDwukierunkowa lista;

    lista.dodaj_elem(1);
    lista.wyswietl_elem();

//    dodaj_elem(&wsk, 12);
//    dodaj_elem(&wsk, 9);
//    dodaj_elem(&wsk, 8);
//    dodaj_elem(&wsk, 9);
//    dodaj_elem(&wsk, 9);
//    wyswietl_elem(wsk);
//    cout << liczba_elem(wsk) << endl;
//    cout << liczba_elem_o_war(wsk, 9) << endl;
//    cout << boolalpha << czy_zawiera(wsk, 12) << endl;
//    usun_elem(&wsk, 1);
//    wyswietl_elem(wsk);
//    zwolnij_liste(&wsk);

}
error: request for member 'poprz' in '*((ListaDwukierunkowa*)this)->ListaDwukierunkowa::lista', which is of pointer type 'elem*' (maybe you meant to use '->' ?)
             cout << "poprz: " <<  lista->poprz << " | ten: " << lista << " | war:" << lista->wartosc << " | nast:" << lista->nast << endl;

在此處輸入圖像描述


錯誤圖像,

listaelem**類型:指向指針的指針。

->運算符延遲一級指針。 所以lista->poprz和 (*lista).poprz 是一樣的。

在這種情況下,您需要取消引用兩次: (*lista)->poprz

注意:我沒有試圖理解為什么lista是指向指針的指針。 可能您只是想要elem*

暫無
暫無

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

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