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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
daite_dve
0 / 0 / 0
Регистрация: 06.02.2012
Сообщений: 37
#1

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

27.04.2012, 12:29. Просмотров 740. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.04.2012, 12:29
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ошибка компиляции (преобразование объекта класса в объект другого класса) (C++):

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

Объявление объекта класса fstream в качестве статической компоненты другого класса - C++
Доброго времени суток. Есть задание, в котором говорится &quot;...Перепишите программы из упражнений 4 и 6 таким образом, чтобы использовать...

Создание объекта класса с полем являющимся объектом другого класса - C++
Bill a; cin&gt;&gt;a;//тут я ввел с помощью перегруженного оператора ElementSpiska c; //поля у Spiska(Bill A,int,string,int) ...

Указатель на объект базового класса и адрес объекта производного класса - C++
Пример кода: class Class1 { public: Class1(int x) { j = new int; *j = x; } ~Class1() {delete j;}

Объявление объекта одного класса в описании другого класса - C++
Здравствуйте. Почему при объявлении Student s в классе Teacher не возникает ошибки? Ведь такой объект уже существует. И почему при...

Ошибка при компиляции. Как правильно создавать класс с объектами от другого класса? - C++
Есть класс Car. У него есть двигатель(class Engine) и переменная скорость(speed), которая зависит от мощности(power). power- переменная...

2
amfisat
67 / 67 / 1
Регистрация: 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
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
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.04.2012, 13:52
Привет! Вот еще темы с ответами:

Ошибка при вызове метода класса в методе другого класса - C++
Господа программисты, возникла такая проблема. При вызове метода класса в методе другого класса выходит такая ошибка &quot; нестандартный...

Ошибка при работе с объектом класса в конструкторе другого класса - C++
Имеется данный код: https://github.com/ubelian/glgame/tree/master/glgame В файле Food.cpp в конструкторе класса Food::Food() на 19...

Передача объекта методу другого объекта другого класса - C++
Всем привет. Есть у меня класс test1, который имеет конструкторы только с параметрами. Другой класс test2 имеет конструктор, который...

Вызов функции класса из другого файла.(Модель компиляции) - C++
Здравствуйте! Пишу движек игры, написал большую часто кода по которой задумывалось примерно то что тут ниже. не могу понять как...


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

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

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