switch (class_type)

erotic

Можно ли сделать switch от составного типа? От класса, например?
Я пробовал сделать так:

template <class T>
class Point2D {
public:
T x, y;
};
Point2D<double> a(1,2);
switch (a)
{
}

Компилятор выдал ошибку:
error C2450: switch expression of type 'Point2D<T>' is illegal
with
[
T=unsigned char
]
No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
после чего я дописал в класс Point2D такое:
 public:
bool operator==(Point2D<T> t)
{
return (x==t.x && y==t.y);
}

Но ошибка прежняя...
Можно вообще сделать то, чего я хочу?

shlyumper

Можно вообще сделать то, чего я хочу?
судя по характеру вопросов, которые ты здесь задаешь, тебе скорее следовало бы почитать книжку по С++, чем сидеть в форуме.

Dasar

> Можно ли сделать switch от составного типа? От класса, например?
нет, нельзя

erotic

Книжку читал.
Но меня смутила формулировка ошибки - там же не написали, что передается сложный тип вместо простого. Там написали, что нет определенного пользователем соответствующего оператора или его невозможно вызвать. Поэтому и спросил.

shlyumper

Книжку читал.
процитируй, что написано в книжке про switch?

rosali

нет определенного пользователем соответствующего оператора или его невозможно вызвать
Имелось в виду, что нет оператора кастинга в скалярный тип.
Разработчики компилятора понадеялись, что программист знает язык на котором программирует а не будет изучать его по текстам сообщений об ошибках

erotic

Не вопрос:
Язык C имеет встроенный оператор множественного выбора, называемый switch. Основная форма оператора имеет такой вид:
switch (выражение) {
case constant1:
последовательность операторов
break;
case constant2:
последовательность операторов
break;
case constantN:
последовательность операторов
break;
default:
последовательность операторов
}
В общем, книга Б.И. Березин и С.Б. Березин, начальный курс С и С++, страница 76. Дальше писать ломает, но про простой тип там не написано ни слова.

erotic

Да, это написано в MSDN.
Кстати, если уж на то пошло, то ты мог бы знать русский язык, коли на нем пишешь.
программист знает язык на катором программирует

shlyumper

мда. говнокнижка, однако. Читай лучше http://www.libex.ru/detail/book32739.html или страуструпа, на худой конец...

erotic

Не, спасибо. Говнокнижка+MSDN вместе состовляют хороший справочник по языку.

erotic

А можно определить пользовательский оператор кастинга в скалярный тип?

shlyumper

а та книжка - великолепный учебник, тебе скорее он нужен сам многие вещи в C++ в свое время окончательно осознал только после прочтения этой книги.

shlyumper

бля, разрешаю. ну что за вопросы?

erotic

А как его определить?

rosali

operator int

erotic

Ух ты ебты... Вот теперь ты меня точно убедил, что мне надо книжку почитать...

Dasar

если все-таки действительно хочешь понять возможности C++, то читай Страуструпа, и выкини свою левую книжку.
ps
MSDN - именно про C++ пишет очень сжато и неполно.

erotic

Пасиб

mira-bella

Не, спасибо. Говнокнижка+MSDN вместе состовляют хороший справочник по языку.
только не по языку C++ (и не по C конечно)
MSDN - это хороший справочник по мелкомягким библиотекам и расширениям Visual C/C++
Говнокнижка она и в африке говнокнижка
Хороший справочник по языку C++ в природе один - стандарт C++ (хороший справочник обычно не является хорошим учебником впрочем) - он самый хороший по определению ибо он определяет язык.
В качестве учебника может сгодится Страуструп, поскольку он автор языка C++, он очень развернуто и последовательно излагает все возможности языка. Может излишне обширно правда.

maggi14

Мне Эккель нравится. Правда, я имел глупость учиться по МСДН и сообщениям об ошибках, но другим следовать моему примеру не советую.
Оставить комментарий
Имя или ник:
Комментарий: