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

Найдите ошибку - C++

Восстановить пароль Регистрация
 
vladxxl
0 / 0 / 0
Регистрация: 15.12.2010
Сообщений: 52
26.04.2011, 17:11     Найдите ошибку #1
Код
#include <iostream> 
 #include <math.h> 

 using namespace std; 

 class integer{ 
 protected: 
 int result; 
 public: 
 integer(){ //Êîíñòðóêòîð ïî-óìîë÷àíèþ
 result = 0; 
 cout<<"Default value of result is 0\n"; 
 } 
 integer(int x){ //ïåðåãðóæåíûé êîíñòðóêòîð
 result = x; 
 cout<<"Result = "<<result<<"\n"; 
 }
 integer(integer&D){//êîíñòðóêòîð êîïèðîâàíèÿ
 result=D.result;
} 
friend class Hero;                  
 ~integer(){ 
 cout<<"Destructor"; //äåñòðóêòîð
 } 
};
class Hero{

public:
 void plus(int x){result += x; };//ñóììà 
 void minus(int x){ result -= x; }; //ðàçíèöà
 void div(int x){ if(x!=0){ result /= x; }else{ cout<<"Error: division by zero\n"; } };//äåëåíèå 
 void multiply(int x){ result *= x; }; //óìíîæåíèå
 void show(){ cout<<"Result = "<<result<<"\n"; }; //âûâîä â êîíñîëüêó
 }; 

 class addons: public integer{ //ïðîèçâîäíûé êëàññ
 public: 
 addons(int x){ result = x; }; 
 int topow(int n){ return (int)pow(result, n); };//ñòåïåíü 
 float root(){ return sqrt(result);}; //êîðåíü
 float tcos(){ return cos(result*(360/6.28)); };//êîñèíóñ 
 float tsin(){ return sin(result*(360/6.28)); }; //ñèíóñ
 }; 

 int main(){ //êëàâíàÿ ôóíêöèÿ

 addons a(10);
 Hero b; 
 b.show(); 
 b.plus(30); 
 b.show(); 
 b.minus(4); 
 b.show(); 

 cout<<"Square is "<<a.topow(2)<<"\n"; 
 cout<<"Root is "<<a.root()<<"\n"; 

 system("PAUSE"); 
 return 0; 
 }
вся проблема, если верить компилятору, в том, что несмотря на то, что класс Hero объявлен friend'ом его функции не понимают, что переменная result уже объявлена. Прежде чем писать ответ, пожайлуста, проверте на своём компиляторе.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.04.2011, 17:11     Найдите ошибку
Посмотрите здесь:

C++ Найдите ошибку
Найдите ошибку C++
Найдите ошибку C++
C++ Найдите ошибку!
C++ Найдите ошибку
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
igorrr37
 Аватар для igorrr37
1593 / 1221 / 118
Регистрация: 21.12.2010
Сообщений: 1,868
Записей в блоге: 7
26.04.2011, 17:28     Найдите ошибку #2
сперва создайте объект класса integer, а потом обращайтесь к его полю result
vladxxl
0 / 0 / 0
Регистрация: 15.12.2010
Сообщений: 52
26.04.2011, 17:37  [ТС]     Найдите ошибку #3
Цитата Сообщение от igorrr37 Посмотреть сообщение
сперва создайте объект класса integer, а потом обращайтесь к его полю result
А можно поподробней, а то я не совсем понял о чём вы
igorrr37
 Аватар для igorrr37
1593 / 1221 / 118
Регистрация: 21.12.2010
Сообщений: 1,868
Записей в блоге: 7
26.04.2011, 17:44     Найдите ошибку #4
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
#include <iostream>
#include <math.h>
using namespace std;
 
class integer{
    protected:
        int result;
    public:
        integer(){ //Конструктор по-умолчанию
            result = 0;
            cout<<"Default value of result is 0\n";
        }
        integer(int x){ //перегруженый конструктор
            result = x;
            cout<<"Result = "<<result<<"\n";
        }
        integer(integer&D){//конструктор копирования
            result=D.result;
        }
        friend class Hero;
            ~integer(){
            cout<<"Destructor"; //деструктор
        }
}a;
 
class Hero{
    public:
        void plus(int x){a.result += x; };//сумма
        void minus(int x){ a.result -= x; }; //разница
        void div(int x){ if(x!=0){ a.result /= x; }else{ cout<<"Error: division by zero\n"; } };//деление
        void multiply(int x){ a.result *= x; }; //умножение
        void show(){ cout<<"Result = "<<a.result<<"\n"; }; //вывод в консольку
};
 
 class addons: public integer{ //производный класс
     public:
         addons(int x){ result = x; };
         int topow(int n){ return (int)pow(result, n); };//степень
         float root(){ return sqrt(result);}; //корень
         float tcos(){ return cos(result*(360/6.28)); };//косинус
         float tsin(){ return sin(result*(360/6.28)); }; //синус
 };
 
int main(){ //клавная функция
    addons a(10);
    Hero b;
    b.show();
    b.plus(30);
    b.show();
    b.minus(4);
    b.show();
    cout<<"Square is "<<a.topow(2)<<"\n";
    cout<<"Root is "<<a.root()<<"\n";
    return 0;
}
или сделать static int result
Yandex
Объявления
26.04.2011, 17:44     Найдите ошибку
Ответ Создать тему
Опции темы

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