Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Проблема при переборе списка

23K
17 июля 2009 года
Spice
37 / / 10.07.2008
При переборе списка компилятор ругается на строчку "printf("%i", index->geti());"
MyClass::geti' : cannot convert 'this' pointer from 'const MyClass' to 'MyClass &'
Объясните, пожалуйста кто сможет почему.
И в случаи, если так делать нельзя, подскажите, как это реализовать.

Код:
#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;
}
288
17 июля 2009 года
nikitozz
1.2K / / 09.03.2007
Попробуйте так
 
Код:
class MyClass
{
public:
    MyClass(int i);

    int geti() const;

protected:
    int i;
};
23K
17 июля 2009 года
Spice
37 / / 10.07.2008
Большое спасибо!! Помогло :-)
23K
22 июля 2009 года
Spice
37 / / 10.07.2008
Возникла подобная проблема. Только в данном случаи метод класса не возвращает значения, а изменяет значение приватного поля класса.
"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;
}
842
22 июля 2009 года
sigmov
301 / / 16.09.2008
используйте простой list<T>::iterator а не list<T>::const_iterator, ибо второй предполагает что через него не будут пытаться изменить класс.
23K
22 июля 2009 года
Spice
37 / / 10.07.2008
Большое спасибо. Как часто это бывает, всего лишь невнимательность. :-)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог