Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
0 / 0 / 2
Регистрация: 06.02.2012
Сообщений: 37
1

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

27.04.2012, 12:29. Просмотров 936. Ответов 2
Метки нет (Все метки)

Друзья, добрый день!

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

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; 
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.04.2012, 12:29
Ответы с готовыми решениями:

Ошибка при попытке использовать объект класса в определении другого класса
Муторное название получилось :scratch: Прошу помощи.... есть созданный класс работы со строкой:...

Как связать сигнал одного класса со слотом другого класса, содержащего указатель на объект этого класса?
Подскажите, пожалуйста, как связать сигнал одного класса со слотом другого класса, содержащего...

Объект не из класса, а из другого объекта
Вобщем есть такая интересная задачка: создать объект не из класса, а тиражировать из другого...

Как из одного объекта получить объект другого класса?
Форумчане, подскажите. У меня есть два класса: class Category{ private $id = ''; private...

2
70 / 70 / 36
Регистрация: 16.06.2009
Сообщений: 240
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 - вроде как использование переменной до ее объявления.
1
0 / 0 / 2
Регистрация: 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
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.04.2012, 13:52

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Вызвать процедуру\функцию из другого объекта\класса. Из одного класса\объекта сделать два
Здравствуйте. Подскажите что не правильно делаю, и возможно ли вообще - вызвать процедуру\функцию...

Не баг ли? Объект видит приватные члены другого объекта этого же класса
не баг ли что getObj() можно изменять приватное свойство другого объекта class Exam1 { ...

Использование в качестве поля класса указатель на объект другого класса
Ошибка в названии - &quot;указателЯ&quot; Вот, пытаюсь освоить ООП (пока только учусь): создаю класс...

Возможно ли создать объект своего класса, который состоит из объектов другого класса?
Возможно ли создать объект своего класса, который состоит из объектов другого класса, например: ...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.