186 / 186 / 21
Регистрация: 08.01.2011
Сообщений: 1,139
|
||||||||||||||||
1 | ||||||||||||||||
Не работает явное преобразование типа, а неявное работает.03.09.2011, 20:35. Показов 5083. Ответов 28
Метки нет (Все метки)
Опечатался. Не работает явное преобразования, а не явное работает.
Есть класс( не обращайте внимание на члены данные класса ):
А вот если вместо 999 написать Complex(999), то будет ошибка: нет подходящего конструктора преобразования. В чем проблема?
0
|
03.09.2011, 20:35 | |
Ответы с готовыми решениями:
28
Явное и неявное преобразование типов Явное или неявное приведение типа Явное преобразование типа в стиле С Неявное преобразование типа |
Бродяга
314 / 268 / 56
Регистрация: 27.08.2010
Сообщений: 553
|
||||||
03.09.2011, 20:44 | 2 | |||||
При таком вызове Complex(999) будет неоднозначность, т.к имеется два кандидата:
1
|
186 / 186 / 21
Регистрация: 08.01.2011
Сообщений: 1,139
|
|||||||||||
03.09.2011, 20:48 [ТС] | 3 | ||||||||||
Вот блин. Вторую строчку ошибки не прочитал.
Я думал, что спецификатор explicit все решит. Мою ошибку исправить так:
0
|
Заблокирован
|
||||||
03.09.2011, 20:50 | 4 | |||||
-
Сделай вот так
Стандартный класс complex.
1
|
Заблокирован
|
|
03.09.2011, 20:55 | 5 |
Это совершенно некорректный код, так как конструкторы не возвращают значения!
Добавлено через 49 секунд У вас все равно сохранится неоднозначность. Вам просто нужно убрать из списка конструкторов первый конструктор.
0
|
186 / 186 / 21
Регистрация: 08.01.2011
Сообщений: 1,139
|
|
03.09.2011, 20:59 [ТС] | 6 |
Я сам хочу написать, ибо опыт то получать надо. Да и ваш не подходит потому, что в моем тупом задании комплексный класс совсем по другому себя ведет.
static_cast< Complex > (999) - так можно преобразовать int к Complex, но почему в моем классе это неоднозначность, если у меня перед первым конструктором стоит спецификатор explicit, который запрещает использовать этот конструктор при преобразовании типа? Да и Complex complex = Complex(999) - это ведь тоже преобразования типа или нет? В любом случае static_cast не работает, хотя есть спецификатор explicit. Добавлено через 2 минуты Нет, только что проверил. Да и вы сам где видите неоднозначность? Выбирается тот конструктор у которого 1 параметр.
0
|
Заблокирован
|
|||||||||||
03.09.2011, 21:00 | 7 | ||||||||||
- внимательно изучи мой код, а потом замечания делай
1
|
Заблокирован
|
|
03.09.2011, 21:00 | 8 |
static_cast<complex>( 999 ) вызывает конструктор complex( 999 ). Я вам уже сказал, что вам надо выкинуть конструктор, где вы устанавливаете аргументы по умолчанию. Это логически неверно, так как у вас есть конструктор с одним аргументом. Вам скорей всего радо создать конструктор по умолчанию к вашему списку конструкторов, где обе части комплексного числа будут положены равуными 0.
1
|
186 / 186 / 21
Регистрация: 08.01.2011
Сообщений: 1,139
|
|
03.09.2011, 21:07 [ТС] | 10 |
Все, я понял. Я плохо запомнил из книги, что делает explicit.
Оказывается он подавляет только неявные преобразования, т.е. код Complex complex = 999 работает, т.к. тут неявное преобразования, а из-за того, что есть explicit, один из конструкторов запрещается и остается только оставшийся. А тут Complex complex = Complex(999) не работает, т.к. explicit не подавляет явное преобразование. Кстати говоря, в книге Дейтелов написано, что explicit можно применять только к конструктору с одним аргументом, ибо будет ошибка компиляции. А вот Visual Studio 2008 позволяет использовать explicit к конструктору с двумя аргументами.
0
|
Заблокирован
|
|
03.09.2011, 21:18 | 13 |
- Во первых я окнчил ВУЗ с 5-м наивысшим уровнем аккредитации магистром с отличием, пусть и по другой специальности, не ВТ, во вторых дорости сначала до рейтинга сообщений, чтобы на равных говорить, в третьих, рекомендую прочесть п.4 правил форума, прежде чем гнать на модераторов и его участников, конешно если всё же хочешь на нём учавствоватьИ вобще кумарят выскочки которые возомнили, что центры вселенной и кроме ни никто не умеет программировать - проект привёл как наглядный пример - нет желания его изучать, тогда рекомендую изучить литературу по С!
0
|
Модератор
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
|
||||||
03.09.2011, 21:21 | 14 | |||||
Код
$ g++ -o wrong_complex wrong_complex.cpp wrong_complex.cpp:8: error: ‘Complex’ has not been declared wrong_complex.cpp:8: error: ISO C++ forbids declaration of ‘Complex’ with no type wrong_complex.cpp:19: error: expected `}' at end of input wrong_complex.cpp: In member function ‘int CComplex::Complex(double)’: wrong_complex.cpp:11: error: ‘class CComplex’ has no member named ‘mod’ wrong_complex.cpp:12: error: ‘class CComplex’ has no member named ‘arg’ wrong_complex.cpp:13: error: cannot convert ‘CComplex’ to ‘int’ in return wrong_complex.cpp: At global scope: wrong_complex.cpp:19: error: expected unqualified-id at end of input Добавлено через 1 минуту
0
|
Заблокирован
|
|
03.09.2011, 21:21 | 15 |
Спасибо, я долго смеялся! Увы, то, что вы там заканчивали, никакого отношения не имеет к стандарту С++. Можно ничего не заканчивать, а читать стандарт С++, и вы будете грамотнее любого, кто имеет 10 образований, но не читал стандарт. Что касается пресловутого рейтинга, то тут такие же безграмотные, как вы, чаще всего модераторы в отместку мне, что я ловлю их на их безграмотности удаляют мне баллы! То есть есть такой тип непорядочных людей, которые вместо того, чтобы вступать в открытую дискуссию, потихонечку гадят.
Что касается меня, то я в себе уверен. Я на этом форуме один из самых грамотных специалистов по с++, и никаеи рейтинги меня смутить не в состоянии.
0
|
Заблокирован
|
|
03.09.2011, 21:26 | 16 |
- не так, вот так CComplex a(4.5;-6.4),
Перд мэйн LPCCOMPLEX lpc = new CComplex(); не даром проект прикладывал Не работает явное преобразование типа, а неявное работает. Добавлено через 3 минуты - это последняя буква в алфавите, лучше коректно подбирать выссказывания, чтоб не было мучительно больно...
0
|
Модератор
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
|
|
03.09.2011, 21:29 | 17 |
Сообщение было отмечено как решение
Решение
3
|
Модератор
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
|
|
03.09.2011, 21:31 | 19 |
Да без разницы, компилятор до этой строчки не доходит даже. Напиши сам, чтобы компилировалось...
0
|
03.09.2011, 21:38 | 20 |
Не по теме: -=ЮрА=-, когда говорят "иметь совесть", хотят сказать совсем другое :) Пожалуйста, соблюдайте п.4 правил, хотя бы в той степени, в которой вы сами требуете этого в своей подписи. Сыроежка прав, так как у вас конструктор таки пытается вернуть значение:
0
|
03.09.2011, 21:38 | |
03.09.2011, 21:38 | |
Помогаю со студенческими работами здесь
20
Обобщения. Неявное преобразование типа невозможно Неявное преобразование типа данных через структуры Быстрое преобразование Фурье и ошибка "Неявное преобразование типа" Неявное преобразование типа int в bool. Как исправить? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |