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

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

Восстановить пароль Регистрация
 
dalay_lama
 Аватар для dalay_lama
65 / 65 / 7
Регистрация: 22.09.2012
Сообщений: 435
22.09.2013, 08:54     Один класс не видит другой. Преобразование класса #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
#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? если да, то подскажите пожалуйста, как решить эту проблему? чтобы оба класса видели друг друга.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.09.2013, 08:54     Один класс не видит другой. Преобразование класса
Посмотрите здесь:

Как использовать функцию класса в другом классе (ни один из классов не наследует другой)? C++
Написать класс, от которого можно получить только один экземпляр класса C++
Один класс не видит другой C++
C++ Добавление экземпляров одного класса в другой класс
C++ Производный класс не видит перегруженную операцию базового класса
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,919
Записей в блоге: 2
Завершенные тесты: 1
22.09.2013, 10:01     Один класс не видит другой. Преобразование класса #2
разделить на файлы
zer0mail
2188 / 1871 / 187
Регистрация: 03.07.2012
Сообщений: 6,661
Записей в блоге: 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, не надо ставить ';' после } при определении функций.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
22.09.2013, 13:35     Один класс не видит другой. Преобразование класса #4
Цитата Сообщение от dalay_lama Посмотреть сообщение
как решить эту проблему?
...
Объявление и определение классов
dalay_lama
 Аватар для dalay_lama
65 / 65 / 7
Регистрация: 22.09.2012
Сообщений: 435
22.09.2013, 14:33  [ТС]     Один класс не видит другой. Преобразование класса #5
Все большое спасибо за то что откликнулись. Особенное спасибо zer0mail, мог бы блин и сам додуматься(
А почему не нужно ставить ';'?
zer0mail
2188 / 1871 / 187
Регистрация: 03.07.2012
Сообщений: 6,661
Записей в блоге: 1
22.09.2013, 14:55     Один класс не видит другой. Преобразование класса #6
Она там не нужна (хотя одни компиляторы сообщают об ошибке, а другие - пропускают).
Несложно запомнить: в конце класса "};", а в конце функции - "}".
dalay_lama
 Аватар для dalay_lama
65 / 65 / 7
Регистрация: 22.09.2012
Сообщений: 435
22.09.2013, 14:58  [ТС]     Один класс не видит другой. Преобразование класса #7
Да не как-бы, дело не в этом "сложно-не сложно") просто интересно было узнать. У меня почему-то в голове мысль такая постоянно сидел, мол ставить ";" - это правильно и грамотно) - откуда такая мысль залезла не знаю) но теперь буду знать, спасибо)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.09.2013, 15:11     Один класс не видит другой. Преобразование класса
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
22.09.2013, 15:11     Один класс не видит другой. Преобразование класса #8
Цитата Сообщение от dalay_lama Посмотреть сообщение
мог бы блин и сам додуматься
dalay_lama, лучше, всё-таки, держать реализации отдельно от объявлений.
Yandex
Объявления
22.09.2013, 15:11     Один класс не видит другой. Преобразование класса
Ответ Создать тему
Опции темы

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