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

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

Войти
Регистрация
Восстановить пароль
 
Керра
 Аватар для Керра
1275 / 443 / 45
Регистрация: 24.08.2011
Сообщений: 2,131
#1

Дружественный оператор не видит закрытые члены класса - C++

07.06.2014, 20:48. Просмотров 220. Ответов 2
Метки нет (Все метки)

angle.h:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#pragma once
#include <iostream>
using std::ostream;
 
class Angle
{
    friend ostream& operator<<(ostream& out, Angle &arg);
public:
    Angle(int g = 0, int m = 0);
    ~Angle();
    float Radians();
    void To360();
    void Inc(int g, int m);
    void Dec(int g, int m);
    float Sin();
    bool operator>(Angle r);
    bool operator<(Angle r);
    bool operator==(Angle r);
private:
    int gr, min;
    float Radians(float alpha);
};
angle.cpp:
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
82
83
#define _USE_MATH_DEFINES
#include <math.h>
#include "angle.h"
using std::cout;
using std::ostream;
 
Angle::Angle(int g, int m)
{
    if (m > 60)
        cout << "Минут больше 60, они будут переведены в градусы\n";
    gr = g + m/60;
    min = m%60;
}
 
Angle::~Angle()
{
}
 
ostream& operator<<(ostream& out, Angle A)
{
    out << A.gr << " градусов " << A.min << " минут\n";
    return out;
}
 
float Angle::Radians()
{
    return gr*M_PI/180;
}
 
void Angle::To360()
{
    if (abs(gr) > 360)
        gr %= 360;
    if (gr < 0)
        gr += 360;
}
 
void Angle::Inc(int g, int m)
{
    gr += g + m/60;
    min += m%60;
}
 
void Angle::Dec(int g, int m)
{
    gr -= g + m/60;
    min -= m%60;
}
 
float Angle::Sin()
{
    return sin(Radians(gr + min/60.));
}
 
bool Angle::operator<(Angle r)
{
    if (gr%360 < r.gr%360)
        return true;
    else if (gr%360 > r.gr%360)
        return false;
    else
        return min < r.min;
}
 
bool Angle::operator==(Angle r)
{
    return gr%360 == r.gr%360 && min == r.min;
}
 
bool Angle::operator>(Angle r)
{
    if (gr%360 > r.gr%360)
        return true;
    else if (gr%360 < r.gr%360)
        return false;
    else
        return min > r.min;
}
 
float Radians(float alpha)
{
    return alpha*M_PI/180;
}
Ругается:
Код
1>d:\с++\test\test\angle.cpp(21): error C2248: Angle::gr: невозможно обратиться к private член, объявленному в классе "Angle"
1>          d:\с++\test\test\angle.h(20): см. объявление "Angle::gr"
1>          d:\с++\test\test\angle.h(6): см. объявление "Angle"
1>d:\с++\test\test\angle.cpp(21): error C2248: Angle::min: невозможно обратиться к private член, объявленному в классе "Angle"
1>          d:\с++\test\test\angle.h(20): см. объявление "Angle::min"
1>          d:\с++\test\test\angle.h(6): см. объявление "Angle"
Почему?
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.06.2014, 20:48     Дружественный оператор не видит закрытые члены класса
Посмотрите здесь:

C++ Статические члены класса
дружественный оператор для вектора C++
C++ Статические члены класса
Где мы можем использовать, дружественный оператор сложения? C++
C++ открытые члены класса переделать в закрытые
C++ Перегрузка (бинарный, дружественный оператор)
Массив указателей на члены класса C++
C++ Private и public члены класса
Дружественный метод класса и ошибка доступа C++
Указатели на члены класса C++
Static члены класса C++
C++ Функция-друг не видит члены класса private

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
0x10
2449 / 1621 / 238
Регистрация: 24.11.2012
Сообщений: 3,988
07.06.2014, 20:51     Дружественный оператор не видит закрытые члены класса #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Сигнатуры разные. В заголовочном файле, в 7 строке Angle передается по ссылке, в реализации (cpp, строка 19) - по значению.
Керра
 Аватар для Керра
1275 / 443 / 45
Регистрация: 24.08.2011
Сообщений: 2,131
07.06.2014, 20:53  [ТС]     Дружественный оператор не видит закрытые члены класса #3
0x10, спасибо
Yandex
Объявления
07.06.2014, 20:53     Дружественный оператор не видит закрытые члены класса
Ответ Создать тему
Опции темы

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