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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не работает operator= 
:(
    Опции темы
EKoshelev
Дата 9.11.2011, 10:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Здравствуйте.
У меня такая проблема. Первый раз пытаюсь писать свой opertator=. Вот его текст (хотя, полагаю, он не важен):

Код

CParamBuffer CParamBuffer::operator= (CParamBuffer paramBuffer)
{
    int i;

    CParamBuffer* resBuffer = new CParamBuffer();

    // Копируем списки параметров
    resBuffer->m_paramList = paramBuffer.m_paramList;
    resBuffer->m_bitParamList = paramBuffer.m_bitParamList;
    // Установим размер
    resBuffer->resize(paramBuffer.size());
    // Скопируем значения
    for (i = 0; i < paramBuffer.m_paramList.size(); i++)
    {
        resBuffer->setValue(paramBuffer.m_paramList[i]->name(), 
                            value(paramBuffer.m_paramList[i]->name()));
    };

    // Переопределим родительские paramBuffer'ы
    resBuffer->setParentBuffers();

    // Вернём
    return *resBuffer;
};


При попытке присвоить один объект другому:

Код

CParamBuffer m_mainBuffer;
CParamBuffer *mBuffer;
...
m_mainBuffer = *mBuffer


в левом (m_mainBuffer) остаётся то, что было до присвоения, хотя при трассировке по коду оператора к последней строке (return *resBuffer) все свойства принимают нужные значения.

Если пытаться вызывать этот оператор так:

Код

m_mainBuffer = (CParamBuffer::operator = (*mBuffer));


то на этапе компиляции выводится ошибка: «error C2352: 'CParamBuffer::operator =' : illegal call of non-static member function». На сколько я понял, речь идёт о том, что какой-то статический метод пытается вызвать не статический. Где там статический и какой нестатический он вызывает - не ясно. Пытался комментировать код оператора - результат тот же.


--------------------
Вежливым и адекватным предлагаю общаться на "ты".
PM MAIL   Вверх
newbee
Дата 9.11.2011, 11:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бревно
**


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

Репутация: 3
Всего: 19



Цитата
-CParamBuffer CParamBuffer::operator= (CParamBuffer paramBuffer)
+&CParamBuffer CParamBuffer::operator= (CParamBuffer const &paramBuffer)

1. Оператор= должен возвращать не копию себя, а самого себя.
2. Оператору= желательно давать сохранять не копию присваемого объекта, а сам этот объект.

Добавлено через 10 секунд
Это то, что сразу в глаза бросилось.


--------------------
You're face to face
With man who sold the world
PM   Вверх
bsa
Дата 9.11.2011, 11:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Цитата(EKoshelev @  9.11.2011,  11:56 Найти цитируемый пост)
то на этапе компиляции выводится ошибка: «error C2352: 'CParamBuffer::operator =' : illegal call of non-static member function». На сколько я понял, речь идёт о том, что какой-то статический метод пытается вызвать не статический. Где там статический и какой нестатический он вызывает - не ясно. Пытался комментировать код оператора - результат тот же. 

нет. просто кто-то не знает синтаксиса языка:
Код
m_mainBuffer.operator=(*mBuffer);
Кроме того, что сказала сделать newbee, тебе еще необходимо изменить строку:
Код
CParamBuffer* resBuffer = new CParamBuffer();
на
Код
CParamBuffer* &resBuffer = this;
Или заменить везде resBuffer на this (или даже просто удалить, так как внутри методов this подставляется автоматически).
PM   Вверх
EKoshelev
Дата 9.11.2011, 13:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата

просто кто-то не знает синтаксиса языка:

Ага. Догнал ))

Заработало после того как удалил resBuffer. Советы newbee тоже учел. Всё работает, спасибо.


--------------------
Вежливым и адекватным предлагаю общаться на "ты".
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


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

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


 




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


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

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