Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.90/29: Рейтинг темы: голосов - 29, средняя оценка - 4.90
186 / 186 / 21
Регистрация: 08.01.2011
Сообщений: 1,139

Не работает явное преобразование типа, а неявное работает.

03.09.2011, 20:35. Показов 6284. Ответов 28
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Опечатался. Не работает явное преобразования, а не явное работает.
Есть класс( не обращайте внимание на члены данные класса ):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Complex
{
    friend std::istream &operator>>( std::istream &, Complex & );
    friend std::ostream &operator<<( std::ostream &, const Complex & );
 
public:
    explicit Complex( double = 0.0, double = 0.0 );
    Complex( double );
 
    Complex operator*( const Complex & );
    Complex operator+( const Complex & );
    Complex operator-( const Complex & );
 
private:
    double mod; // модуль комплексного числа
    double arg; // аргумент комплексного числа
};
Вот реализация конструктора преобразования:
C++
1
2
3
4
Complex::Complex( double m_mod )
:mod( m_mod ), arg( 0 )
{
}
Вот функция main:
C++
1
2
3
4
5
6
7
8
9
10
#include "Complex.h"
 
int main()
{
    Complex comp = 999;
    std::cout << comp;
 
    system( "pause" );
    return 0;
}
Вот так программа работает, т.е. неявное преобразование типа от int к Complex работает.
А вот если вместо 999 написать Complex(999), то будет ошибка: нет подходящего конструктора преобразования.

В чем проблема?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.09.2011, 20:35
Ответы с готовыми решениями:

Явное и неявное преобразование типов
Явное и неявное преобразование типов.

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

Явное преобразование типа в стиле С
1) назовите направление преобразование ( из какого типа в какой ) 2) назовите точность преобразования (С потерей точности , без потери...

28
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
03.09.2011, 22:14
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от easybudda Посмотреть сообщение
Да без разницы, компилятор до этой строчки не доходит даже. Напиши сам, чтобы компилировалось...
- в 6-ке всё компилиться, вот скрин дебага, экзешник тоже в проекте, так что в чём трабла ума не приложу
Миниатюры
Не работает явное преобразование типа, а неявное работает.  
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12848 / 7597 / 1766
Регистрация: 25.07.2009
Сообщений: 13,985
03.09.2011, 22:21
-=ЮрА=-, ну а сам код будет? Только по возможности без windows.h а то у меня с ним не задалось как-то
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
03.09.2011, 22:37
Цитата Сообщение от talis Посмотреть сообщение
Сыроежка прав, так как у вас конструктор таки пытается вернуть значение:
Вот это хотел реализовать, вобщем не конструктор описывал, а фунцию
C++
1
CComplex Complex(double _re){CComplex ret_val;ret_val.re = _re; ret_val.im = 0;return ret_val;}
- писал быстро и немного бегло топик прочёл, так что думал речь о функции велась

Вот как выглядит класс который в качестве ознакомпления приводил

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class CComplex
{   
public:
    double re,im;   
    CComplex(){re = 0; im = 0;}
    CComplex(double _re, double _im){re = _re; im = _im;}
 
    CComplex operator+(double val);
    CComplex operator-(double val);
    CComplex operator*(double val);
    CComplex operator/(double val);
 
    CComplex operator+(CComplex& val);
    CComplex operator-(CComplex& val);
    CComplex operator*(CComplex& val);
    CComplex operator/(CComplex& val);
 
    double Re(CComplex val);
    double Im(CComplex val);
    CComplex ExpToAlg(double abs_val, double angle);
    CComplex AlgToExp(CComplex val);
    CComplex cmxpower(CComplex val, double power);
};
typedef CComplex *LPCCOMPLEX;
C++
1
2
CComplex(){re = 0; im = 0;} //конструктор по умолчанию
CComplex(double _re, double _im){re = _re; im = _im;} //конструктор преобразования
Добавлено через 5 минут
Цитата Сообщение от easybudda Посмотреть сообщение
=ЮрА=-, ну а сам код будет? Только по возможности без windows.h а то у меня с ним не задалось как-то
- в 12-м посте проект висит(уже кидал ссылку на него).Если не нравится windows.h - закоментируй ветви с GetLastError и strerror, или же подключи соответсвующие хедеры - первая в winbase объявлена, вторая в string.h
0
 Аватар для talis
794 / 546 / 61
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
03.09.2011, 22:41
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Если не нравится windows.h - [...] - первая в winbase объявлена
Я подозреваю, что winbase может быть неудобен пользователям юниксов не меньше, чем windows.h
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
03.09.2011, 22:44
Цитата Сообщение от talis Посмотреть сообщение
Я подозреваю, что winbase может быть неудобен пользователям юниксов не меньше, чем windows.h
- ну тогда думаю лучше и проще выкинуть ветви с GetLastError
0
236 / 173 / 25
Регистрация: 13.11.2010
Сообщений: 425
03.09.2011, 23:01
-=ЮрА=-, зачем давать пользовательский класс для составления такого же (по функционалу) пользовательского класса?
Chelioss, я советую вам заменить поля класса (с модуля и аргумента на реальную и мнимую части).
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
03.09.2011, 23:38
Цитата Сообщение от almazsr Посмотреть сообщение
-=ЮрА=-, зачем давать пользовательский класс для составления такого же (по функционалу) пользовательского класса?
- реально не понял вопрос
0
Эксперт С++
 Аватар для CyBOSSeR
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675
03.09.2011, 23:42
Цитата Сообщение от Сыроежка Посмотреть сообщение
Вам просто нужно убрать из списка конструкторов первый конструктор.
Как раз таки только первый и нужно оставить:
C++
1
Complex(double r = 0.0, double i = 0.0);
1
186 / 186 / 21
Регистрация: 08.01.2011
Сообщений: 1,139
04.09.2011, 01:35  [ТС]
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Как раз таки только первый и нужно оставить:
C++
1
Complex(double r = 0.0, double i = 0.0);
Точно. Из трех конструктор достаточно одного.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
04.09.2011, 01:35

Неявное преобразование типа
Привет. Решаю задачу, не могу решить проблему. Есть класс 'time' и производный от него класс 'interval'. 1 - содержит поля h, m, s,...

Обобщения. Неявное преобразование типа невозможно
Вылетает ошибка: Неявное преобразование типа &quot;T &quot; в &quot;T&quot; невозможно. Почему так нельзя? class Test&lt;T&gt; { T...

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

Быстрое преобразование Фурье и ошибка "Неявное преобразование типа"
А подскажите еще по одной прблемке: Есть программа реализующая БПФ (ну должна по крайней мере это делать) using System; using...

Неявное преобразование типа int в bool. Как исправить?
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
29
Ответ Создать тему
Новые блоги и статьи
Часы с термометром и праздничным календарем
yariko 12.11.2026
Сегодня мы рассмотрим как можно сделать отличные многофункциональные часы. Итак, поставим конкретную задачу: разработать часы с календарем, двумя термодатчиками, выводом поздравительных сообщений. . .
Транслитерация текста с кириллицы на латиницу (вариант №1)
Maks 11.11.2026
Решил облегчить жизнь себе и коллегам админам при создании электронных почтовых ящиков для пользователей, в результате написал обработку "Транслитерация текста" с кириллицы на латиницу, а в ней. . .
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version 1. 2003 - 06 - Designing Virtual Worlds (1st Edition) Автор: Richard A. Bartle | Объем: 768 стр. Ссылки: Amazon . . .
Родители токсичные абьюзеры по отношению к своим детям ругают их оскорбляют не любят
zorxor 08.11.2026
Жить в атмосфере постоянных оскорблений, критики и холодности со стороны родителей — это тяжелое и болезненное испытание, которое оставляет глубокие эмоциональные раны. Токсичное и абьюзивное. . .
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров". Задача: Запрет инициалов. Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . . Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru