Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Перегрузка оператора присвоения, Как правильно переопределить = 
V
    Опции темы
ipc
Дата 9.4.2012, 17:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Доброго времени суток, господа.

Пишу проект на Embarcadero RAD Studio XE2 C++
Возникла необходимость простым способом написать объект, который бы проявлял свойства int или WideString в зависимости от ситуации.
Например, при присвоении значения с этими типами в ту или другую сторону. Унаследоваться от WideString не удалось, поэтому через вложения:

Код

struct Vary{
    WideString wsName;
    int iCount;

    Vary();
    ~Vary();

    // перегрузка операторов для работы Widestring
    Vary& operator =(WideString wsName);
    WideString  operator =(const Vary &varObj);
};

...
Vary& Vary::operator =(WideString wsNameInc){
    wsName = wsNameInc;
    return *this;
}

WideString  Vary::operator =(const Vary &varObj){
    return varObj.wsName;
}

...
// использование
    WideString wsTemp = "test";
    Vary varyTemp;

    varyTemp = wsTemp;
    WideString wsRes = varyTemp;
...


компилятор ругается на последнюю строчку:
E2285 Could not find a match for 'WideString::WideString(const WideString&)'

Я так понимаю, он хочет увидеть переопределенный конструктор копирования WideString, потому как сработало правило трех. Переопределение конструктора копирования не изменило ничего.

Подскажите, пожалуйста, как разрешить данную проблему?

Заранее спасибо!
PM MAIL   Вверх
disputant
Дата 9.4.2012, 18:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



А вот тут

Код

Vary& operator =(WideString wsName)


передачу через ссылку не пробовали организовать? Чтоб лишний раз ему копировать не надо было? Да и тут

Код

WideString  operator =(const Vary &varObj)


возвращать ссылку?

Это сообщение отредактировал(а) disputant - 9.4.2012, 18:21
PM MAIL   Вверх
ipc
Дата 9.4.2012, 19:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



disputant, спасибо за скорый ответ.
Цитата

возвращать ссылку?


так?

Код

WideString & operator =(const Vary &varObj)


если "да", то не помогло, ошибка та же..
но за совет - спасибо

Это сообщение отредактировал(а) ipc - 9.4.2012, 20:55
PM MAIL   Вверх
volatile
Дата 10.4.2012, 01:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(ipc @  9.4.2012,  17:59 Найти цитируемый пост)
WideString  Vary::operator =(const Vary &varObj){
    return varObj.wsName;

Вам имхо нужен не оператор присваивания, а оператор приведения к WideString.
В общем то что выше удалите, а добавтье :
Код

operator WideString ()
{
   return wsName;
}


Добавлено через 2 минуты и 4 секунды
По крайней мере теперь, эта строчка, должна работать
Цитата(ipc @  9.4.2012,  17:59 Найти цитируемый пост)
  WideString wsRes = varyTemp;

в остальное не вникал...
PM MAIL   Вверх
ipc
Дата 10.4.2012, 10:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



volatile, спасибо! Помогло.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

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

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

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

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


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

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


 




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


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

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