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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Переместить в каждом столбце матрицы все отрицательные элементы в начало столбца,а неотрицательные - в конец http://www.cyberforum.ru/cpp-beginners/thread1202145.html
Разработать программу,которая вводит целочисленную матрицу из n строк и m столбцов (1<n<100, 1<m<=50) и упорядочивает элементы матрицы.Переместить в каждом столбце все отрицательные элементы в начало столбца,а неотрицательные - в конец.
C++ С++-треугольник Разработать программу,которая выводит на экран геометрическую программу,заполняя ее символом "*" или пробелом.Размер (n) определяется при вводе.Заполненный прямоугольный треугольник.Размер катетов - n. http://www.cyberforum.ru/cpp-beginners/thread1202141.html
Вычислить значение дроби для заданных a и n C++
Всем доброго времени суток.Прошу помочь с задачей.Суть самой проблемы заключается не в коде,а понимании задачи.Условие на скриншоте Не понятно условие задачи. Задаем число а=заданному не меняется,1,2,6,24 это понятно-факториалы.В обведенной формуле непонятно почему n! делится на 12. Если цикл будет идти до n,то и n может быть равно и 10,и 100 или больше.Либо цикл будет до 12,но тогда n не...
Работа с файлами C++
Груз пассажира характеризуется количеством вещей и их общим весом. Сформировать файл, содержащий инфор- мацию о грузе N пассажиров. используя сформирован файл, найти: - Общий груз, средний вес одной вещи данного пассажира и которая отличается не более чем на 0.3 кг от общего среднего веса вещи; - Число пассажиров, имеющих более двух вещей.
C++ Error C2678: бинарный "<<": не найден оператор, принимающий левый операнд типа "std::ifstream" http://www.cyberforum.ru/cpp-beginners/thread1202131.html
Собственно, текст ошибки приведен в названии темы. Сам код: #include "stdafx.h" #include <conio.h> #include <iomanip> #include <ctime> #include <fstream> using namespace std; void SortArray(int *a, int n) { for (int i = 0; i < n; i++)
C++ Как сделать сортировку? как здесь сделать сортировку? Создать класс, содержащий сведения о том, какие из пяти дисциплин по выбору желает изучить студент. Структура: Фамилия студента, индекс группы, пять дисциплин, средний балл успеваемости. Выбираемая дисциплина отмечается -1, иначе 0. Написать программу, выдающую список студентов, желающих прослушать дисциплину Х. Если число желающих превысит 5 человек, то отобрать... подробнее

Показать сообщение отдельно
Керра
Модератор
 Аватар для Керра
1270 / 438 / 45
Регистрация: 24.08.2011
Сообщений: 2,123
07.06.2014, 20:48     Дружественный оператор не видит закрытые члены класса
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"
Почему?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 11:41. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru