#include <stdlib.h>
#include <list>
using namespace std;
class MyClass
{
public:
MyClass(int i);
int geti();
protected:
int i;
};
MyClass::MyClass(int i)
{
this->i = i;
}
int MyClass::geti()
{
return 10;
}
void main()
{
list<MyClass> q;
q.push_back(MyClass(1));
q.push_back(MyClass(2));
for(list<MyClass>::const_iterator index = q.begin(); index != q.end(); index++)
{
printf("%i", index->geti());
printf("%s", "\n");
}
getchar();
return;
}
Проблема при переборе списка
MyClass::geti' : cannot convert 'this' pointer from 'const MyClass' to 'MyClass &'
Объясните, пожалуйста кто сможет почему.
И в случаи, если так делать нельзя, подскажите, как это реализовать.
Код:
Код:
class MyClass
{
public:
MyClass(int i);
int geti() const;
protected:
int i;
};
{
public:
MyClass(int i);
int geti() const;
protected:
int i;
};
Большое спасибо!! Помогло :-)
"Error 1 error C2662: 'Point::SetDX' : cannot convert 'this' pointer from 'const Point' to 'Point &' f:\coding\c++\list_test\mainunit.cpp 61 LIST_TEST"
Код:
#include <stdlib.h>
#include <list>
using namespace std;
class Point
{
public:
Point();
Point(float dX, float dY);
void SetDX(float dX);
void SetDY(float dY);
float GetDX() const;
float GetDY() const;
protected:
float dX;
float dY;
};
Point::Point(): dX(0),dY(0)
{
}
Point::Point(float dX, float dY)
{
this->dX = dX;
this->dY = dY;
}
void Point::SetDX(float dX)
{
this->dX = dX;
}
void Point::SetDY(float dY)
{
this->dY = dY;
}
float Point::GetDX() const
{
return this->dX;
}
float Point::GetDY() const
{
return this->dY;
}
void main()
{
list<Point> lsPoint;
lsPoint.push_back(Point());
lsPoint.push_back(Point(10, 10));
lsPoint.push_back(Point(20, 20));
for(list<Point>::const_iterator indexPoint = lsPoint.begin(); indexPoint != lsPoint.end(); indexPoint++)
{
indexPoint->SetDX(100);
printf("adr = %x; x=%f, y=%f \n", &(*indexPoint), indexPoint->GetDX(), indexPoint->GetDY());
}
getchar();
return;
}
#include <list>
using namespace std;
class Point
{
public:
Point();
Point(float dX, float dY);
void SetDX(float dX);
void SetDY(float dY);
float GetDX() const;
float GetDY() const;
protected:
float dX;
float dY;
};
Point::Point(): dX(0),dY(0)
{
}
Point::Point(float dX, float dY)
{
this->dX = dX;
this->dY = dY;
}
void Point::SetDX(float dX)
{
this->dX = dX;
}
void Point::SetDY(float dY)
{
this->dY = dY;
}
float Point::GetDX() const
{
return this->dX;
}
float Point::GetDY() const
{
return this->dY;
}
void main()
{
list<Point> lsPoint;
lsPoint.push_back(Point());
lsPoint.push_back(Point(10, 10));
lsPoint.push_back(Point(20, 20));
for(list<Point>::const_iterator indexPoint = lsPoint.begin(); indexPoint != lsPoint.end(); indexPoint++)
{
indexPoint->SetDX(100);
printf("adr = %x; x=%f, y=%f \n", &(*indexPoint), indexPoint->GetDX(), indexPoint->GetDY());
}
getchar();
return;
}
используйте простой list<T>::iterator а не list<T>::const_iterator, ибо второй предполагает что через него не будут пытаться изменить класс.
Большое спасибо. Как часто это бывает, всего лишь невнимательность. :-)