Форум программистов, компьютерный форум CyberForum.ru

Ошибка компиляции (преобразование объекта класса в объект другого класса) - C++

Восстановить пароль Регистрация
 
daite_dve
0 / 0 / 0
Регистрация: 06.02.2012
Сообщений: 37
27.04.2012, 12:29     Ошибка компиляции (преобразование объекта класса в объект другого класса) #1
Друзья, добрый день!

Не могу понять почему выдается ошибка компиляции... Прога преобразует доллары США в старые Британские фунты. Но не суть, ошибка чисто синтаксическая. Помогите плз

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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#include<iostream>
using namespace std;
 
class money
{
private:
 
    double m;
 
public:
 
    money(double tm)
    {
        m = tm;
    }
 
    void show()
    {
        cout << "GB to USA : " << m << endl;
    }
 
    operator sterling() const
    {
        int tp, tsh, tpen;
        tpen = m / 20.83 + 0.5;
        tp = tpen / 240 + 0.5;
        tsh = (tpen - tp * 240) / 12 + 0.5;
        tpen = tpen - tp * 240 - tsh * 12 + 0.5; 
        return sterling(tp, tsh, tpen);
    }
 
};
 
class sterling
{
private:
 
    int p;
    int sh;
    int pen;
 
public:
 
    sterling(int tp, int tsh, int tpen)
    {
        p = tp;
        sh = tsh;
        pen = tpen;
    }
 
    void show()
    {
        cout << "USA to GB : " << p << "." << sh << "." << pen << endl;
    }
 
    operator money() const
    {
        double tm;
        tm = static_cast<int>((p * 20 * 12 + sh * 12 + pen) * 20.83 + 0.5);
        tm /= 100;
        return money(tm);
    }
 
};
 
int main()
{
    sterling s1(1, 0, 0);
    money m1 = s1;
    m1.show();
    
    money m2(50.00);
    sterling s2 = m2;
    s2.show();
    
    system("pause");
    return 0; 
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.04.2012, 12:29     Ошибка компиляции (преобразование объекта класса в объект другого класса)
Посмотрите здесь:

Объявление в классе объекта другого класса C++
C++ Как создать объект с конструктором в интерфейсе другого класса?
объявление объекта одного класса в описании другого класса C++
C++ Передача объекта методу другого объекта другого класса
Как создать объект класса? ПРоблемма из-за раздельной компиляции C++
C++ Преобразование объектов одного класса в объекты другого
Указатель на объект базового класса и адрес объекта производного класса C++
C++ Передача указателя в класс на объект другого класса

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
amfisat
 Аватар для amfisat
67 / 67 / 1
Регистрация: 16.06.2009
Сообщений: 235
27.04.2012, 13:19     Ошибка компиляции (преобразование объекта класса в объект другого класса) #2
Как вариант, объяви оператор вне класса:
C++
1
2
3
4
5
6
7
8
9
money::operator sterling() const
    {
        double tp, tsh, tpen;
        tpen = m / 20.83 + 0.5;
        tp = tpen / 240 + 0.5;
        tsh = (tpen - tp * 240) / 12 + 0.5;
        tpen = tpen - tp * 240 - tsh * 12 + 0.5; 
        return sterling(tp, tsh, tpen);
    };
Просто у тебя получается, что sterling объявлен после money - а используется в money - вроде как использование переменной до ее объявления.
daite_dve
0 / 0 / 0
Регистрация: 06.02.2012
Сообщений: 37
27.04.2012, 13:52  [ТС]     Ошибка компиляции (преобразование объекта класса в объект другого класса) #3
Спасибо amfisat! Все заработало!

А теперь для тех кому интересно в чем же тут было дело:

В моем случае оба приобразования объектов (из одного в другой и обратно) нужно писать в одном из классов, например в "money". Для преобразования из sterling в money используется операция преобразования
C++
1
operator money() const
А для преобразования из money в sterling просто конструктор с аргументом типа money
C++
1
sterling (money temp)
Вот и вся магия
Так же если класса два, то все это безобразие обязательно нужно писать во втором классе, а в общем случае - в последнем.

Итак, рабочий код:

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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#include<iostream>
using namespace std;
 
class money
{
private:
 
    double m;
 
public:
 
    money(double tm)
    {
        m = tm;
    }
 
    void show()
    {
        cout << "GB to USA : " << m << endl;
    }
 
    double mGet()
    {
        return m;
    }
 
};
 
class sterling
{
private:
 
    int p;
    int sh;
    int pen;
 
public:
 
    sterling(int tp, int tsh, int tpen)
    {
        p = tp;
        sh = tsh;
        pen = tpen;
    }
 
    sterling (money temp)
    {
        pen = temp.mGet() * 100 / 20.83 + 0.5;
        p = pen / 240 + 0.5;
        sh = (pen - p * 240) / 12 + 0.5;
        pen = pen - p * 240 - sh * 12 + 0.5;
    }
 
    void show()
    {
        cout << "USA to GB : " << p << "." << sh << "." << pen << endl;
    }
 
    operator money() const
    {
        double tm;
        tm = static_cast<int>((p * 20 * 12 + sh * 12 + pen) * 20.83 + 0.5);
        tm /= 100;
        return money(tm);
    }
 
};
 
int main()
{
    sterling s1(1, 0, 0);
    money m1 = s1;
    m1.show();
    
    money m2(50.00);
    sterling s2 = m2;
    s2.show();
    
    system("pause");
    return 0; 
}

P.S.: Задача из книжки Р. Лафоре Гл. 8, Упр. 12
Yandex
Объявления
27.04.2012, 13:52     Ошибка компиляции (преобразование объекта класса в объект другого класса)
Ответ Создать тему
Опции темы

Текущее время: 17:13. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru