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

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

Войти
Регистрация
Восстановить пароль
 
dalay_lama
79 / 79 / 16
Регистрация: 22.09.2012
Сообщений: 493
#1

Один класс не видит другой. Преобразование класса - C++

22.09.2013, 08:54. Просмотров 511. Ответов 7
Метки нет (Все метки)

Всем доброго времени суток. В общем вот есть такой код:
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
#include <cmath>
using namespace std;
 
class Decart;
class Polar
{
        private:
                double distance, angle;
    public:
        void ShowPolar() { cout <<"Полярная система.\nРасстояние: " <<distance <<"; Направление: " <<angle <<endl; };
        //Переопределения----------------------
        Polar operator+(Polar var)
        {
            Polar help;
            help.distance = distance + var.distance;
            help.angle = angle + var.angle;
            return help;
        };
        Polar operator-(Polar var)
        {
            Polar help;
            help.distance = distance - var.distance;
            help.angle = angle - var.angle;
            return help;
        };
        operator Decart()
        {
            Decart help;
            help.x = distance * cos(angle);
            help.y = distance * sin(angle);
            return help;
        }
        //Конструкторы-------------------------
        Polar (int dstc, int angl):distance(dstc),angle(angl) {};
        Polar ():distance(0),angle(0) {};
};
class Decart
{
        private:
                double x,y;
    public:     
        //Методы-------------------------------
        void ShowDecart() { cout <<"Декартовая система.\nКоординаты: x = " <<x <<"; y = " <<y <<endl; };
        Decart operator+(Decart var)
        {
            Decart help;
            help.x = x + var.x;
            help.y = y + var.y;
            return help;
        };
        Decart operator-(Decart var)
        {
            Decart help;
            help.x = x - var.x;
            help.y = y - var.y;
            return help;
        };
        double operator*(Decart var1)//скалярное произведение
        {
            return var1.x * x + var1.y * y;
        }
        operator Polar()
        {
            Polar help;
            help.distance = sqrt(x*x + y*y);
            help.angle = atan2(y,x);
            return help;
        }
        //Конструкторы-------------------------
        Decart (double pX, double pY):x(pX),y(pY) {};
        Decart ():x(0),y(0) {};
};
Проблема вот в этой строчке:
C++
1
2
3
        operator Decart()
        {
            Decart help;
Т.е. при приобразовании типа Polar к Decart. Копилятор ругается на то, что Decart не полон и не определён. Я так понимаю, эта ошибка из-за того, что класс Decart у меня описан ниже чем Polar? если да, то подскажите пожалуйста, как решить эту проблему? чтобы оба класса видели друг друга.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.09.2013, 08:54
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Один класс не видит другой. Преобразование класса (C++):

Область видимости. один класс не видит другой класс - C++
Добрый день! такая проблема. Есть базовый класс Q. От него наследуется 2 класса Р и G. Класс P имеет два конструктора 1 принимает...

Один класс не видит другой - C++
Есть 2 класса, унаследованные от общего родителя. Один из классов-потомков не видит второй, объявленный ниже. Попытки обвиться его...

Один класс не видит другой класс - C++
Не компилируется код, компилятор выдает ошибку, как я понял это из-за того что я использую в первом классе, второй класс который идет после...

Преобразование типов. Не конструктор не видит класс - C++
Здравствуйте. В коде ниже, я хотел реализовать конвертер длин. Я создал 2 класса и при помощи 2 конструкторов хотел решить проблему...

Преобразование из одного класса в другой - C++
Привет, есть два класса RUSmoney и USmoney. Там я сделал конвертирование из RUSmoney в USmoney и наоборот (строки 41 и 75) Вот код: ...

Производный класс не видит перегруженную операцию базового класса - C++
Подскажите пожалуйста, почему производный класс, а именно его объект не видит перегруженную операцию, в данном случае это префиксные...

7
Croessmah
Ушел
13783 / 8033 / 928
Регистрация: 27.09.2012
Сообщений: 19,803
Записей в блоге: 3
Завершенные тесты: 1
22.09.2013, 10:01 #2
разделить на файлы
1
zer0mail
2447 / 2081 / 205
Регистрация: 03.07.2012
Сообщений: 7,563
Записей в блоге: 1
22.09.2013, 10:57 #3
Как-то так:
Кликните здесь для просмотра всего текста
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
class Decart;
class Polar
{
        private:
                double distance, angle;
    public:
        void ShowPolar() { cout <<"Полярная система.\nРасстояние: " <<distance <<"; Направление: " <<angle <<endl; };
        //Переопределения----------------------
        Polar operator+(Polar var)
        {
            Polar help;
            help.distance = distance + var.distance;
            help.angle = angle + var.angle;
            return help;
        }
        Polar operator-(Polar var)
        {
            Polar help;
            help.distance = distance - var.distance;
            help.angle = angle - var.angle;
            return help;
        }
        Decart GetDecart();
        //Конструкторы-------------------------
        Polar (int dstc, int angl):distance(dstc),angle(angl) {}
        Polar ():distance(0),angle(0) {}
        friend Decart;
};
class Decart
{
        private:
        double x,y;
    public:     
        //Методы-------------------------------
        void ShowDecart() { cout <<"Декартовая система.\nКоординаты: x = " <<x <<"; y = " <<y <<endl; };
        Decart operator+(Decart var)
        {
            Decart help;
            help.x = x + var.x;
            help.y = y + var.y;
            return help;
        }
        Decart operator-(Decart var)
        {
            Decart help;
            help.x = x - var.x;
            help.y = y - var.y;
            return help;
        }
        double operator*(Decart var1)//скалярное произведение
        {
            return var1.x * x + var1.y * y;
        }
        Polar GetPolar();
        //Конструкторы-------------------------
        Decart (double pX, double pY):x(pX),y(pY) {}
        Decart ():x(0),y(0) {}
        friend Polar;
};
Decart Polar::GetDecart()
{
            Decart help;
            help.x = distance * cos(angle);
            help.y = distance * sin(angle);
            return help;
}
Polar Decart::GetPolar()
{
            Polar help;
            help.distance = sqrt(x*x + y*y);
            help.angle = atan2(y,x);
            return help;
}

dalay_lama, не надо ставить ';' после } при определении функций.
1
alsav22
5437 / 4832 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
22.09.2013, 13:35 #4
Цитата Сообщение от dalay_lama Посмотреть сообщение
как решить эту проблему?
...
Объявление и определение классов
1
dalay_lama
79 / 79 / 16
Регистрация: 22.09.2012
Сообщений: 493
22.09.2013, 14:33  [ТС] #5
Все большое спасибо за то что откликнулись. Особенное спасибо zer0mail, мог бы блин и сам додуматься(
А почему не нужно ставить ';'?
0
zer0mail
2447 / 2081 / 205
Регистрация: 03.07.2012
Сообщений: 7,563
Записей в блоге: 1
22.09.2013, 14:55 #6
Она там не нужна (хотя одни компиляторы сообщают об ошибке, а другие - пропускают).
Несложно запомнить: в конце класса "};", а в конце функции - "}".
1
dalay_lama
79 / 79 / 16
Регистрация: 22.09.2012
Сообщений: 493
22.09.2013, 14:58  [ТС] #7
Да не как-бы, дело не в этом "сложно-не сложно") просто интересно было узнать. У меня почему-то в голове мысль такая постоянно сидел, мол ставить ";" - это правильно и грамотно) - откуда такая мысль залезла не знаю) но теперь буду знать, спасибо)
0
alsav22
5437 / 4832 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
22.09.2013, 15:11 #8
Цитата Сообщение от dalay_lama Посмотреть сообщение
мог бы блин и сам додуматься
dalay_lama, лучше, всё-таки, держать реализации отдельно от объявлений.
1
22.09.2013, 15:11
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.09.2013, 15:11
Привет! Вот еще темы с ответами:

Функции из класса поместить в другой класс - C++
Например, у меня есть класс А и в нём представлена функция х. И есть другой класс В, хочу в нём вызвать функцию х из класса А, но пишет,...

Добавление экземпляров одного класса в другой класс - C++
Доброе утро! В программе создано 2 класса. 1-й предназначен для создания объекта под названием &quot;студент&quot;. Он имеет различные свойства (фио,...

Как использовать функцию класса в другом классе (ни один из классов не наследует другой)? - C++
функция в классе в котором она прописана объявлена как паблик. void auction::rvectoroldtime(int oldtime1, double low, double high ) { ...

Написать класс, от которого можно получить только один экземпляр класса - C++
Написать класс, от которого можно получить только один экземпляр класса. Как такое реализовать? Если использовать только статические члены...


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

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

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