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

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

03.09.2011, 20:35. Показов 6047. Ответов 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
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,980
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
Ответ Создать тему
Новые блоги и статьи
Море в объективе
kumehtar 06.07.2026
Хотел написать много проникновенных слов, но передумал. Оно само - говорит. Кто слышит тот слышит.
Оказывается, Unreal Engine позволяет качество на порядки выше, чем было в Lineedge
Etyuhibosecyu 05.07.2026
Жаль, конечно, что я не узнал об этом, пока Lineedge существовала, а то бы Noname2331 написал, что волки превращаются в пиксельную кашу, а я бы его попросил скачать какую-нибудь бриллиантовую или Pro. . .
Doom для терминала без стрельбы и монстров. 3D Raycasting на ascii.
dcc0 05.07.2026
Попросил нейронную сеть deepai. org написать рейкастинг 3D с библиотекой ncurses для Linux. Чтобы можно было ходить на стрелочки. Чтобы стены были отрисованы символами. Справилась. Первый вариант. . .
Установка статуса документа по условию
Maks 05.07.2026
Алгоритм из решения ниже реализован на нетиповом документе "НарядПутевка" разработанного в КА2. Задача: в табличной части "Материалы" документа при записи автоматически устанавливать статус. . .
Сезонность и суточность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет. Но обычно это 50 лет и более. Наверное, закисление почвы происходит сезонно в средней. . .
В чем ценность человеческого опыта в глобальном смысле?
kumehtar 03.07.2026
Возможно, ценность человека не в том, что он однажды достигает мудрости, а в том, что он становится носителем карты пути. Он знает не только истину, но и последовательность внутренних изменений,. . .
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи. Через несколько переработок от PHP кода к C89 (надеюсь, 89). Но довольно запутанно получилось. Код для Linux. Но если убрать time и то, что с ним. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru