Ĺ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
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.