ďťż

Ładny brzuch

mam taki problem, że nie mogę tego przeciążyć

mam klasę ListElem, gdzie mam min ListElem * next i mam klasę List, gdzie mam ListElem* beg.
chcę zrobić beg = beg->next i nie wiem, jak -> przeciążyć

help

z góry thx



Pokaż kod jaki napisałeś. To, co chciałbyś zrobić nie wymaga przeciążenia w sensie takim, jak ja znam pojęcie przeciążenia, więc chyba o coś innego chodzi. Tak więc pokaż kod. :unsure:

może i nie wymaga, ale przydalo by się

class C_ListElem {
private:
C_Member member;
C_ListElem * next;
C_ListElem * prev;

public:
C_ListElem ()
{ next = prev = NULL; }

// C_ListElem * operator -> ()
// { return this; }
};
typedef C_ListElem * P_ListElemPtr;
//--------------------------------------------
class C_List {
private:
P_ListElemPtr beg;

public:
~C_List ()
{
P_ListElemPtr deleted;
while ( beg )
{
deleted = beg;
beg = beg->next;
delete deleted;
}
}

void insert ( C_Member inserted );
};

To, co widzę nie wymaga przeciążenia. Używałem takiego kodu, co prawda to, co u ciebie jest C_List_Elem u mnie było zwykłą strukturą, ale i tak działało. Więc pomiń to przeciążanie i też powinno być dobrze. Natomiast sama konstrukcja operatora powinna mieć w nawiasach argumenty, czyli to, co jest po prawej i po lewej stronie tego operatora ->. Stąd może wynikać błąd jaki masz.



własnie all się kompiluje, a operator nie działa

mi chodzi o to, żeby te pola były prywatne i żebym miał do nich dostęp

a ten operator nie może miec argumentów, taka jest jego odgórna definicja, gdzieś to w MSDN widziałem, i kompilator rzeczywiście przy próbie wbicia argumentów drze na mnei ryja

{return this->next}

Chyba tak to powinno być, ale nie sprawdzałem na żywo. Więc jak możesz, to spróbuj i napisz co z tego wyszło.

to nie będzie dobre, bo mam liste dwukierunkową
wiec zarówno wskaźniki prev i next musze jakoś obsłuzyć
dla 1kierunkowej byłoby to fajne rozwiązanie

To może tak:

class C_ListElem {      friend class C_List; private: C_Member member; C_ListElem * next; C_ListElem * prev; public: C_ListElem () { next = prev = NULL; } //C_ListElem * operator->(); // { return this; } };

Nie ma przeciążenia, ale działa chyba tak jak byś chciał. Poza tym takie przeciążenie operatora dawało by jako wynik wskaźnik do tego samego obiektu i nadal nie było by możliwości odwołania się do następnego.

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • zsf.htw.pl
  •