Operator= - dostęp do struktury w klasie.

0

Hej, mam problem z użyciem struktury która jest wewnątrz klasy. Dokładniej problem tkwi w operatorze przypisania.

template<typename Key, typename Info>
void Sequence<Key,Info>::operator=(const Sequence &x)
{
    element *ptr=head;
    while(ptr)//deallocating memory
    {
        head=ptr->next;
        delete[] ptr;
        ptr=head;
    }
    x.element *ptr2;- nie działa. jak mogę utworzyć pointer na strukturę element z klasy x? 
/* reszta programu */ 


}

Nie bardzo wiem, jak mam utworzyć pointer'a klasy x. Może ktoś pomóc?

1

x.element to obiekt. Nie typ. A potrzebujesz typu.

  1. auto ptr2 = &x.element;
  2. decltype(x.element) *ptr2;
0

Wszystko tutaj jest poplątane z pomieszaniem.

void Sequence<Key,Info>::operator=(const Sequence &x)
  • Operator przypisania powinien zwracać referencję do obiektu, taka jest jego kanoniczna forma.
  • Sequence to nie jest klasa, tylko szablon klasy, więc const Sequence& x nie ma za bardzo sensu. To tak jakby pisać const std::vector& x.

```cpp // jak mogę utworzyć pointer na strukturę element z klasy x ``` `x` to nie klasa, tylko zmienna. Jeśli mam **zgadywać**, to pewnie próbujesz coś w stylu ```cpp element* ptr2 = x.head; // head to tylko przykład ```
0

@twonek: element to akurat nazwa typu he? No jak?

0

@twonek: element *ptr=head. No dobra, w sumie cholera wie. Może to być obiekt w klasie x, a może być jakiś typ.

3

Swoją drogą, const Sequence& x jak najbardziej ma sens ze względu na class name injection.
https://stackoverflow.com/questions/25549652/why-is-there-an-injected-class-name

#include <type_traits>

template<typename Key, typename Info>
struct Sequence {
    void operator=(const Sequence &x);
};

template<typename Key, typename Info>
void Sequence<Key,Info>::operator=(const Sequence &x) {
    static_assert(std::is_same_v<Sequence<Key,Info>, decltype(x)>);
}

int main () {
    Sequence<int, int> a;
}
0

Dziękuje za odpowiedzi i zwrócenie uwagi na błędy. Pozdrawiam serdecznie :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1