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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.09.2016, 18:36   #1
1valdis
Новичок
Джуниор
 
Регистрация: 14.09.2016
Сообщений: 4
По умолчанию C++: Двустороннее преобразование классов

Приветствую.
Допустим, есть два простых класса: integer с одной переменной типа int, real - с double. Я уже сделал так, что следующий код работает:
Код:
integer a=2016;
int b=a;

real a=20.16;
double b=a;
Теперь нужно сделать так, чтобы работали преобразования между ними:
Код:
integer foo; real bar;
foo=bar;
bar=foo;
Каким способом это сделать?

Проект делаю на DevC, он разделен на файлы main.cpp, integer.h, integer.cpp, real.h, real.cpp.
Содержание последних четырёх:
Код:
//integer.h

class integer
{
    private:
        int a;
    public:
        integer();
        integer(int number);
        operator int() const;
};

//integer.cpp

#include "integer.h"

integer::integer(){
    a=0;
}
integer::integer(int number){
    a=number;
}
integer::operator int() const{
    return a;
}

//real.h

class real {
    private:
        double a;
    public:
        real();
        real(double number);
        operator double() const;
};

//real.cpp

#include "real.h"

real::real(){
    a=0;
}
real::real(double number){
    a=number;
}
real::operator double() const{
    return a;
}
Спасибо.

Последний раз редактировалось 1valdis; 14.09.2016 в 18:40.
1valdis вне форума Ответить с цитированием
Старый 14.09.2016, 18:44   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

Либо в классе integer сделать operator float() const либо в классе real сделать конструктор real(integer)...
Скорее всего второе.
waleri вне форума Ответить с цитированием
Старый 14.09.2016, 18:53   #3
1valdis
Новичок
Джуниор
 
Регистрация: 14.09.2016
Сообщений: 4
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
Либо в классе integer сделать operator float() const либо в классе real сделать конструктор real(integer)...
Скорее всего второе.
Можно ли подробнее? Весь день вот убил на всевозможные конструкторы, forward declaration'ы и прочие круговые зависимости.
1valdis вне форума Ответить с цитированием
Старый 14.09.2016, 19:32   #4
1valdis
Новичок
Джуниор
 
Регистрация: 14.09.2016
Сообщений: 4
По умолчанию

Добавляю в integer метод get. Дальше добавляю следующее в соотв. файлы:
Код:
//real.h

class integer;
class real {
...
public:
real(integer& number);
}

//real.cpp

real::real(integer& number){
	a=number.get();
}
Получаю invalid use of incomplete type 'class integer'. ЧЯДНТ?
1valdis вне форума Ответить с цитированием
Старый 14.09.2016, 21:07   #5
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

real.cpp должен инклюдить integer.h иначе класс не будет знать "что там внутри", о чем и сообщает компилятор.
waleri вне форума Ответить с цитированием
Старый 14.09.2016, 21:42   #6
1valdis
Новичок
Джуниор
 
Регистрация: 14.09.2016
Сообщений: 4
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
real.cpp должен инклюдить integer.h иначе класс не будет знать "что там внутри", о чем и сообщает компилятор.
Вы оказались совершенно правы. Я добавил
Код:
#ifndef INTEGER_H
#include "integer.h"
#endif
в real.cpp и то же сделал с вторым классом, даже не надеясь на то что оно заработает - ведь я уже делал похожее, но как оказывается не то же самое. Честно сказать, я уже и не помню что именно я делал. Скорее всего, инклюдил один .h в другой... Спасибо!
1valdis вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
XeroxWorkCenter 3315/3325 Двустороннее копирование oldsnowman Компьютерное железо 4 04.08.2016 09:39
[C#] Сериализация списка классов (нескольких классов) vermond Помощь студентам 3 06.06.2015 23:10
Преобразование часов в числа, а так же преобразование время PeMeHb Microsoft Office Excel 5 19.10.2014 17:04
композиция классов с++ нона Помощь студентам 3 06.05.2012 12:22
Создание классов и использование объектов классов при написании программ в среде C++. Frozen inside Помощь студентам 0 16.04.2009 23:18