crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> псевдонимы(опять этот гемор)
voipp
  опции профиля:
сообщение 11.2.2010, 18:31
Сообщение #1


Участник
**

Группа: Участник
Сообщений: 116
Регистрация: 20.10.2009
Из: Msk
Пользователь №: 1166

Спасибо сказали: 0 раз(а)




Репутация:   0  


объясню ситуацию на пальцах.Значит имеется operator=(classX &X).Мне нужно использовать этот оператор, вот только аргумент его X а не &X.Компилятор выдает ошибку.Что делать и почему в аналогичной ситуации - void func(classX &X), func(X) ошибки не возникает.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 11.2.2010, 18:46
Сообщение #2


Профессионал
*****

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

Спасибо сказали: 264 раз(а)




Репутация:   44  


Попробуй так:
operator=(const classX &X)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
voipp
  опции профиля:
сообщение 12.2.2010, 11:02
Сообщение #3


Участник
**

Группа: Участник
Сообщений: 116
Регистрация: 20.10.2009
Из: Msk
Пользователь №: 1166

Спасибо сказали: 0 раз(а)




Репутация:   0  


спасибо за помощь.А не растолкуете теперь - почему это так?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Влад
  опции профиля:
сообщение 12.2.2010, 13:49
Сообщение #4


Участник
**

Группа: Участник
Сообщений: 146
Регистрация: 20.3.2009
Из: Санкт-Петербург
Пользователь №: 627

Спасибо сказали: 46 раз(а)




Репутация:   8  


Приведи тестовый код и какую ошибку выдает компилятор. Каноническую форму operator=() уже тебе написал коллега BRE.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Iron Bug
  опции профиля:
сообщение 12.2.2010, 17:53
Сообщение #5


Профессионал
*****

Группа: Модератор
Сообщений: 1611
Регистрация: 6.2.2009
Из: Yekaterinburg
Пользователь №: 533

Спасибо сказали: 219 раз(а)




Репутация:   12  


Цитата(voipp @ 12.2.2010, 13:02) *
спасибо за помощь.А не растолкуете теперь - почему это так?


а чего тут толковать? операторы по определению имеют ограничения на операнды:

Цитата(Bjarne Stroustrup)
11.2.2 Predefined Meanings for Operators [over.predefined]

Only a few assumptions are made about the meaning of a user-defined operator. In particular,
operator=, operator[], operator(), and operator-> must be nonstatic member functions; this
ensures that their first operands will be lvalues (§4.9.6).


и оператор присвоения имеет тип ссылки на константный объект. кстати, неясно, чем не угодило обращение по ссылке вместо формального параметра? если будет просто тип class X - то он будет копироваться и передаваться через стек. а нафиг это нужно, если всё равно операнд константный?

Сообщение отредактировал Iron Bug - 12.2.2010, 17:57
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 19.4.2024, 1:04