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

Один класс не видит другой - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Помогите найти ошибку. http://www.cyberforum.ru/cpp-beginners/thread422074.html
Задание с подпрограммой, которая упорно не хочет работать и я уже не знаю в чем ошибка.(Данные считываются из текстового файла) Даны массивы N1…N20 – наименование стран; K1…K20 – население в каждой стране; S1…S20 – занимаемая площадь. Напечатать два списка: 1-ый - список стран, где на одного человека приходится от 0,1 до 1 кв.км; 2-ой – список стран, где на одного человека приходится...
C++ Найти в матрице первый по очереди строка с наибольшей суммой элементов. Дано матрицу размерности N на M. Найти в матрице первый по очереди строка с наибольшей суммой элементов. Вывести его номер. http://www.cyberforum.ru/cpp-beginners/thread422042.html
Создать два бинарных файла, содержащих числовую информацию. В результате преобразований в первом файле должны остаться только четные, а во втором C++
Создать два бинарных файла, содержащих числовую информацию. В результате преобразований в первом файле должны остаться только четные, а во втором только нечетные числа. Дополнительных массивов не использовать. помогите написать текст программы! плиз
C++ Компоненты текстового файла содержат целые числа. Счи-таем, что если компонента содержит два числа - это коорди-наты точки, три - координаты цент
Компоненты текстового файла содержат целые числа. Счи-таем, что если компонента содержит два числа - это коорди-наты точки, три - координаты центра и радиус окружности, 4- координаты противоположных вершин прямоугольника. Вы-числить максимальную площадь фигур. Помогите плиз вообще не знаю как сделать!
C++ Где ошибка? http://www.cyberforum.ru/cpp-beginners/thread422008.html
Помогите найти ошибку? #include <iostream.h> int main () { int x,y,z; cout << "Enter two numbers:\n"; cout << "First number:"; cin >> x; cout << "\nSecond number:"; cin >> y;
C++ Простенькая программа с символьной строкой. Надо найти ошибку. Программа, которая ищет в введённой строке вукву A и заменяет её на букву B и выводит полученную строку на экран. У меня же вводится строка и всё, консоль зависает. Найдите ошибку. #include <stdio.h> #include <conio.h> int main(void) { char a; int i; printf( "vvedite stroky: " ); scanf ("%s", a ); подробнее

Показать сообщение отдельно
Roof
 Аватар для Roof
154 / 154 / 10
Регистрация: 03.11.2010
Сообщений: 393
04.01.2012, 00:08     Один класс не видит другой
2 Azazzelo.
Ваш код мне хоть и не нравится ( ведь удобнее разделять объявление и определение, да еще и в файлы заголовков и файлы исходников ), но я постарался только минимальные изменения в него внести, сохранив Ваш стиль.
Есть такой прием - предварительное объявление. Предварительно объявив мы получаем незавершенный тип.

По коду.
Комментарий 1.
Использование незавершенного типа весьма ограничено. Мы тут еще не можем использовать объект типа girl, так как объекты такого типа не могут быть определены.
Незавершенный тип можно использовать только для определения указателей или ссылок, а также для объявления ( но не для определения ) функций, которые используют этот тип как параметр или возвращаемое значение.

Комментарий 2.
А вот в определении функции, вынесенным за пределы тела класса мы уже можем вполне использовать объект типа girl, так как к этому моменту класс girl уже завершен.

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
#include <iostream>
#include <cstring>
#include <cstdlib>
using namespace std;
 
class human
{
public:
        virtual void reaction()
        {cout << "No one cares";};
};
 
class girl;
 
class man : public human
{public:
        int age;
        float k;
        char *name;
        man(int a,char *n)
        {
     name = new char[20];
        strcpy(name,n);
         age =a;
         k= rand()% 10;
        };
        ~man()
        {
        delete[] name;
        age=0;
        k=0;
        };
        man(man& m)
        {
        m.name = new char[20];
        strcpy(m.name, name);
        m.age=age;
        m.k=k;
        };
        
        // 1
        void reaction(girl& g);/* 
        {
        if (g.k <=4) cout << "r1" << endl;
        else if (g.k >4 || g.k <=7) cout << "r2" << endl;
        else cout << "r3" << endl;
        };*/
};
 
class girl : public human
{public:
        int age;
        float k;
        char* name;
        girl(int a,char *n)
        {
         name = new char[20];
         strcpy(name,n);
         age =a;
         k= rand()% 10;
        };
        ~girl()
        {
        delete[] name;
        age=0;
        k=0;
        };
    girl(girl& g)
        {
        g.name = new char[20];
        strcpy(g.name, name);
        g.age=age;
        g.k=k;
        };
        void reaction(man& m)
        {
 
                if (m.k<4) cout << "r1" << endl;
                else if (m.k>5 || m.k<= 8) cout << "r2" << endl;
                else cout << "r3" << endl;
        };
};
// 2
void man::reaction( girl& g){
    if (g.k <=4) cout << "r1" << endl;
    else if (g.k >4 || g.k <=7) cout << "r2" << endl;
    else cout << "r3" << endl;
}
 
int main()
{
    char name1[20] = "masha";
    char name2[20] = "alex";
        girl a(18, name1);
        man b(19, name2);
 
        a.reaction(b);
        b.reaction(a);
 
        return 0;
}
И обратите внимание на предупреждение компилятора для классов.
Код
Class '[C@946049' has virtual method 'reaction' but non-virtual destructor
 
Текущее время: 00:48. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru