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

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

Войти
Регистрация
Восстановить пароль
 
Керра
1276 / 444 / 45
Регистрация: 24.08.2011
Сообщений: 2,133
#1

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

07.06.2014, 20:48. Просмотров 227. Ответов 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++
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;string&gt; using namespace std; float sum=0.0; int *s; int *z; string sotr; float...

Функция-друг не видит члены класса private - C++
#include &lt;iostream&gt; using namespace std; class Phone{ friend ostream &amp; operator&lt;&lt;(ostream&amp;,const Phone&amp;); private: int number; ...

дружественный оператор для вектора - C++
всем доброго времени суток хедер friend vector operator + (const vector&amp; v, const vector&amp; w ); friend vector...

Перегрузка (бинарный, дружественный оператор) - C++
В классе Ellipse перегрузить оператор - (бинарный, дружественный оператор)

Где мы можем использовать, дружественный оператор сложения? - C++
Где мы можем использовать, дружественный оператор сложения,почему нельзя воспользоваться перегрузкой оператора в классе,Зачем усложнять?

Дружественный метод класса и ошибка доступа - C++
class B; class A { public: void f(B&amp; b); }; class B { private:

Статические члены класса - C++
Доброго времени суток. Задача состоит в том, чтобы создать список обыектов класса Test, с возможностью последующего добавления элементов...

Указатели на члены класса - C++
Здравствуйте, В коде при вызове функции print() из CL2 вызывается print() из CL1. Подскажите, где грабли. Заранее спасибо. ...

Static члены класса - C++
Здравствуйте. есть класс, например point { public: float x; float y;

Массив указателей на члены класса - C++
Здравствуйте, подскажите, пожалуйста, как корректно использовать массив указателей на члены класса. list.h Объявление...


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

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

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