Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> l-value, что значит ошибка? 
V
    Опции темы
nns2009
Дата 19.2.2009, 16:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 174
Регистрация: 1.2.2009

Репутация: нет
Всего: 1



Разрабатываю класс со связанным списком, доступ к которому осуществляется как к массиву.
Всё шло хорошо пока я только читал данные из связанного списка с помощью оператора [],
но когда мне понадобилось изменить значения(в четырёх местах), компилятор выдал мне 4 ошибки:
c:\microsoft visual studio 9.0\all\c++\timetable\timetable\timetable.cpp(800) : error C2106: '=' : left operand must be l-value
c:\microsoft visual studio 9.0\all\c++\timetable\timetable\timetable.cpp(801) : error C2106: '=' : left operand must be l-value
c:\microsoft visual studio 9.0\all\c++\timetable\timetable\timetable.cpp(805) : error C2106: '=' : left operand must be l-value
c:\microsoft visual studio 9.0\all\c++\timetable\timetable\timetable.cpp(806) : error C2106: '=' : left operand must be l-value

Вот реализация класса:
Код

class time
{
public:
    bool isNull;
    int x_start;
    int y_start;
    int lenght;
    int pas;
    time* nt;
    time()
    {
        isNull = true;
        nt = NULL;
        x_start = 0;
        y_start = 0;
        lenght = 1;
        pas = 0;
    }
    time(int xs, int ys, int l, int p)
    {
        isNull = false;
        nt = NULL;
        x_start = xs;
        y_start = ys;
        lenght = l;
        pas = p;
    }
    void Add(int xs, int ys, int l, int p)
    {
        if (isNull)
        {
            isNull = false;
            nt = NULL;
            x_start = xs;
            y_start = ys;
            lenght = l;
            pas = p;
            return;
        }
        time* twa = this;
        while(twa->nt != NULL) twa = twa->nt;
        twa->nt = new time(xs, ys, l, p);
    }
    void Delete(int ntd)
    {
        time* twa = this;
        time* to_what;
        for (int i = 0; i < ntd-1; i++)
        {
            if (twa->nt != NULL) twa = twa->nt;
            else return;
        }
        if (twa->nt == NULL) return;
        if (twa->nt->nt == NULL)
        {
            delete [] twa->nt;
            twa->nt = NULL;
            return;
        }
        else
        {
            to_what = twa->nt->nt;
            delete [] twa->nt;
            twa->nt = to_what;
            return;
        }
    }
    time operator [](int index)
    {
        time* twa = this;
        for (int i = 0; i < index; i++)
        {
            if (twa->nt == NULL) return *(twa->nt);
            twa = twa->nt;
        }
        return *twa;
    }
};

А вот - присваивания:
Код

int absp = second_pnt.y*width_of_table+second_pnt.x - indent_of_at;
if (absp >= 0)
{
    times[active_time].x_start = absp % width_of_table;
    times[active_time].y_start = absp / width_of_table;
}
else
{
    times[active_time].x_start = absp % width_of_table + width_of_table;
    times[active_time].y_start = (absp+1) / width_of_table - 1;
}

Подскажите пожалуйста, что значит l-value, как исправить мою ошибку, ну и есть ли в моём классе какие-либо вычислительные ошибки(по поводу связанного списка)?
PM MAIL   Вверх
Andrey44
Дата 19.2.2009, 16:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1501
Регистрация: 4.12.2006
Где: На работе

Репутация: 2
Всего: 26



Цитата

Error Message
'operator' : left operand must be l-value


The operator must have an l-value as its left operand. 

The following sample generates C2106:

  Copy Code 
// C2106.cpp
int main() {
   int a;
   1 = a;   // C2106
   a = 1;   // OK
}
 


Перегрузи оператор =


--------------------
????? ??, ??????? ?????.  smile 
PM MAIL WWW ICQ   Вверх
math64
Дата 19.2.2009, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 8
Всего: 72



operator[] должен возвращать time&, а не time или const time&
PM   Вверх
nns2009
Дата 20.2.2009, 16:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 174
Регистрация: 1.2.2009

Репутация: нет
Всего: 1



Цитата(math64 @  19.2.2009,  16:50 Найти цитируемый пост)
operator[] должен возвращать time&, а не time или const time& 

Спасибо, теперь всё работает.


Цитата(Andrey44 @  19.2.2009,  16:37 Найти цитируемый пост)
Перегрузи оператор = 

А что мне это дало бы?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0476 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.