struct el {
int data;
struct el* next;
el()
{
data=0;
next=NULL;
}
struct el* operator++() {
return (this->next);
}
};
перегрузка ++ для структуры
Elem *next} и оператор void operator ++(Elem **p){*p=(*p)->next} ругается компилятор мол оператор должен быт членом класса либо содержать операнд типа опрделяемого пользователем.мне даже препод не помог.подскажите че делать...
Вот это откомпилилось
благодарю.сяду за комп попробую.
Код:
#include <iostream>
using namespace std;
struct el {
int data;
struct el* next;
el()
{
data=0;
next=NULL;
}
};
struct el& operator++(struct el& p) {
if(p.next)
p=*p.next;
return p;
}
int main () {
struct el* a,*b;
a=new struct el;
b=a;
a->next=new struct el;
a->data=1;
a->next->data=2;
++*a;
cout<<a->data<<endl;
delete b->next;
delete b;
return 0;
}
using namespace std;
struct el {
int data;
struct el* next;
el()
{
data=0;
next=NULL;
}
};
struct el& operator++(struct el& p) {
if(p.next)
p=*p.next;
return p;
}
int main () {
struct el* a,*b;
a=new struct el;
b=a;
a->next=new struct el;
a->data=1;
a->next->data=2;
++*a;
cout<<a->data<<endl;
delete b->next;
delete b;
return 0;
}
Код:
#define NULL 0
#include <iostream>
class Elem
{
public:
Elem(int d, Elem *n = NULL) : data(d), next(n) {};
class iterator
{
public:
iterator(Elem *p) : ptr(p) {};
iterator &operator ++() { ptr = ptr->next; return *this; };
Elem *operator -> () { return ptr; };
Elem &operator * () { return *ptr; };
private:
Elem *ptr;
};
int &operator * () { return data; };
private:
int data;
Elem *next;
};
void main ()
{
Elem e0 (0);
Elem e1 (1, &e0); // Это начало списка
Elem::iterator iter (&e1);
std::cout << "e1: " << **iter << std::endl;
std::cout << "e0: " << **++iter << std::endl;
};
#include <iostream>
class Elem
{
public:
Elem(int d, Elem *n = NULL) : data(d), next(n) {};
class iterator
{
public:
iterator(Elem *p) : ptr(p) {};
iterator &operator ++() { ptr = ptr->next; return *this; };
Elem *operator -> () { return ptr; };
Elem &operator * () { return *ptr; };
private:
Elem *ptr;
};
int &operator * () { return data; };
private:
int data;
Elem *next;
};
void main ()
{
Elem e0 (0);
Elem e1 (1, &e0); // Это начало списка
Elem::iterator iter (&e1);
std::cout << "e1: " << **iter << std::endl;
std::cout << "e0: " << **++iter << std::endl;
};
А еще проще - использовать std::list.
Цитата: fun_phantom
есть структура struct Elem {int data
Elem *next} и оператор void operator ++(Elem **p){*p=(*p)->next} ругается компилятор мол оператор должен быт членом класса либо содержать операнд типа опрделяемого пользователем.мне даже препод не помог.подскажите че делать...
Elem *next} и оператор void operator ++(Elem **p){*p=(*p)->next} ругается компилятор мол оператор должен быт членом класса либо содержать операнд типа опрделяемого пользователем.мне даже препод не помог.подскажите че делать...
Оператор можно переопределять только для классов и структур.