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

Ребят, подскажите как исправить ошибку... - C++

Восстановить пароль Регистрация
 
zhmukh
 Аватар для zhmukh
0 / 0 / 0
Регистрация: 08.12.2009
Сообщений: 4
15.02.2012, 17:39     Ребят, подскажите как исправить ошибку... #1
не могу понять , много что перепробывал компилятор C++ builder codegear
вот собственно сам код
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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
#include <math.h>
#include <iostream.h>
 #pragma argsused
 
//---------------------------------------------------------------------------
 
#pragma argsused
class Pair
    {
        public:
            bool t;
            Pair(int,int);
            int get_a();
            int get_b();
            void print();
            void set(int, int);
            friend Pair operator* (Pair,Pair);
            friend Pair operator- (Pair,Pair);
            //friend Pair operator== (Pair,Pair);
            void oper(Pair,Pair);
        private:
            int a;
            int b;
    } ;
 
 
Pair::Pair(int a1, int b1 )
{
    a=a1;
    b=b1;
}
int Pair::get_a()
{
return a;
}
int Pair::get_b()
{
return b;
}
 
Pair operator* (Pair p1, Pair p2)
{
Pair p3(0,0);
p3.a=p1.a*p2.a;
p3.b=p1.b*p2.b;
return p3;
}
Pair operator- (Pair p1, Pair p2)
{
Pair p3(0,0);
p3.a=p1.a-p1.b;
p3.b=p2.a-p2.b;
return p3;
}
 
//bool operator== (Pair p1, Pair p2)
void Pair::oper(Pair p1, Pair p2)
{
    if ((p1.a == p2.a) && (p1.b=p2.b))
    {
    t=true;
    }
 
}
void Pair :: print()
{
    cout<<a<<','<<b<<endl;
}
class Rational : public Pair
{
        public:
            Rational(int,int);
            void print();
 
            friend Rational operator+ (Pair,Pair);
            friend Rational operator/ (Rational,Rational);
            friend Pair operator-(Pair,Pair);
        private:
            int a;
            int b;
};
 
 
 
Rational::Rational(int a, int b) : Pair(a, b)
{
    a = a;
    b = b;
}
 
void Rational ::   print()
{
    cout<<a<<','<<b<<endl;
}
Rational operator/ (Pair p1, Pair p2)
{
Rational p3(0,0);
 
p3.a=p1.a*p2.b;
p3.b=p1.b*p2.a;
return p3;
}
Pair operator+ (Pair p1, Pair p2)
{
Pair p3(0,0);
p3.a=p1.a*p2.b+p1.b*p2.a;
p3.b=p1.b*p2.b;
return p3;
}
Pair operator- (Pair p1, Pair p2)
{
Pair p3(0,0);
p3.a=p1.a*p2.b-p1.b*p2.a;
p3.b=p1.b*p2.b;
return p3;
}
int main(int argc, char* argv[])
{
 
 
    pair1 p1(-2,0),p2(1,1),p(0,0);
    p=p1*p2;
    p.print();
    return 0;
}
//---------------------------------------------------------------------------

начинает давать ошибку
здесь


C++
1
2
3
4
5
6
7
8
Rational operator/ (Pair p1, Pair p2)
{
Rational p3(0,0);
 
p3.a=p1.a*p2.b;
p3.b=p1.b*p2.a;
return p3;
}


пишет
[BCC32 Error] File1.cpp(103): E2247 'Rational::a' is not accessible
[BCC32 Error] File1.cpp(104): E2247 'Rational::b' is not accessible
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
NoMasters
Псевдослучайный
1737 / 1080 / 69
Регистрация: 13.09.2011
Сообщений: 3,094
15.02.2012, 19:05     Ребят, подскажите как исправить ошибку... #2
Сделай функцию дружественной(у тебя она дружественная только для параметров типа Rational), она до private членов дотянуться не может.
Цитата Сообщение от zhmukh Посмотреть сообщение
C++
1
Rational::Rational(int a, int b) : Pair(a, b) { a = a; b = b; }
А это что должно было делать?
retmas
Жарю без масла
803 / 685 / 143
Регистрация: 13.01.2012
Сообщений: 1,580
15.02.2012, 19:14     Ребят, подскажите как исправить ошибку... #3
имея то, что имеем, можно написать
C++
1
2
3
4
Rational operator/ (Pair p1, Pair p2)
{
   return Rational(p1.get_a() * p2.get_b(), p1.get_b() * p2.get_a());
}
но лучше все удалите и подумайте еще раз как реализовать вашу задумку. уж больно много нелепостей
zhmukh
 Аватар для zhmukh
0 / 0 / 0
Регистрация: 08.12.2009
Сообщений: 4
15.02.2012, 19:32  [ТС]     Ребят, подскажите как исправить ошибку... #4
а как переопределить оператор в наследственном классе?
мне компилятор пишет что использовался уже ранее..
Yandex
Объявления
15.02.2012, 19:32     Ребят, подскажите как исправить ошибку...
Ответ Создать тему
Опции темы

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