Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.10.2010, 20:57   #1
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию Перегрузка оператора [] с типом wstring

Доброго всем.
Мне хочется сделать в классе возможность писать примерно так:
Код:
wcout<<r[L"Name"]<<'\n';
Здесь r - класс, в котором я хочу описать оператор [] принимающий строковое значение примерно так:
Код:
wstring& TWMIRecord::operator[](wstring AName){
    return Field(AName);
};
Но компилятор со мной не согласен
Цитата:
3 IntelliSense: выражение должно иметь целочисленный или перечисляемый тип
Как раз на выражении r[L"Name"].

Подскажите пожалуйста как в Си описать оператор [] с возможностью передачи ему строки, возвращать он должен строку тоже.
Или вообще, можно ли это сделать именно так?
Если нет то как это сделать покрасивее.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 08.10.2010, 21:10   #2
ThisIzGame
Форумчанин
 
Регистрация: 31.08.2009
Сообщений: 161
По умолчанию

Код:
wstring& TWMIRecord::operator[](wstring AName){
    return Field(AName);
};
а что в этом коде означает Field(AName)?
А так нельзя что-ли?
Код:
wstring operator [] ( wstring rhs)
{
    return rhs;
}
тогда всё будет работать на ура...
пример:
Код:
class temp
{
public:
	wstring operator [] ( wstring rhs)
	{
		return rhs;
	}
};

int main(void)
{
	temp t;
	wcout<<t[L"Hello"]<<endl;

	cin.get();
	return 0;
}
Stilet - попробуйте убрать & после wstring.

Последний раз редактировалось ThisIzGame; 08.10.2010 в 21:13.
ThisIzGame вне форума Ответить с цитированием
Старый 08.10.2010, 22:25   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
а что в этом коде означает Field(AName)?
А это функция
Код:
wstring Field(wstring AName);
Дело в том что сам класс компилируется нормально, но именно на строчке вызова опеатора :
Код:
wcout<<r[L"Name"]<<'\n';
вылезает вышеуказанная ошибка
Далее. Если я меняю:
Код:
wstring TWMIRecord::operator[](const int AName){    return Field(AName).Value;};
Field у меня перегружена, и может принимать int, то на строчке
Код:
wcout<<r[i]<<'\n';
где i - целое пишется
Цитата:
Ошибка 1 error C2679: бинарный "<<": не найден оператор, принимающий правый операнд типа "TWMIRecord" (или приемлемое преобразование отсутствует)
почему он считает что r[i] должен возвращать TWMIRecord, если этот оператор в классе описан как возвращающий wstring?

Кстати r у меня объект типа TWMIRecord.

И почему я не могу в [] передавать строку?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 09.10.2010, 13:30   #4
coinkrsk
пыжашийся нуб
Пользователь
 
Регистрация: 19.06.2010
Сообщений: 93
По умолчанию

посредством [] можно передавать любые параметры, ограничений вроде нет. Смущает уже упомянутый амперсант, но может так и надо конечно.

Работает ли следующий код?
Код:
wstring TWMIRecord::operator[](wstring AName){
    return AName;
}
...
wcout << r[L"Name"] << '\n';
coinkrsk вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перегрузка оператора + Jane-sad Помощь студентам 0 05.10.2010 13:52
С++ перегрузка оператора cati Помощь студентам 10 21.04.2010 23:38
перегрузка оператора << z3rg Общие вопросы C/C++ 18 02.03.2010 02:58
перегрузка оператора [] в c++ terminadoor Общие вопросы C/C++ 3 21.01.2010 15:44
Перегрузка оператора + (С++) MjRed Помощь студентам 1 15.12.2008 18:57