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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
AnreyKazakov
Заблокирован
#1

Возможен ли класс для обработки объекта другого класса? - C++

18.10.2012, 03:59. Просмотров 1136. Ответов 29
Метки нет (Все метки)

Решил написать приложение в кот больше 10 строк... Куча классов получилась, запутался в данных и во всем, но главное не вэтом. Получилось так что первый класс должен обрабатывать объект второго класса, и наоборот, второй первого... Можно ли так сделать?

Вот допустим есть два класса, как убрать ошибку в функции void seta() в классе one?
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
#include <iostream>
class one
    {
    public:
    int geta()
        {
        return a;   
        }
    void seta(int _a)
        {
        a=_a;   
        }
    void seta()
        {
        a=b2.getb();
        /*вот здесь ругает*/
        }   
    private:
    int a;  
    };
    
class two
    {
    public:
    int getb()
        {
        return b;   
        }
    void seta(int _b)
        {
        b=_b;   
        }
    private:
    int b;  
    };  
    
int main()
    {
    one a1;
    two b2;
    return 0;   
    }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.10.2012, 03:59
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Возможен ли класс для обработки объекта другого класса? (C++):

Передача объекта методу другого объекта другого класса - C++
Всем привет. Есть у меня класс test1, который имеет конструкторы только с параметрами. Другой класс test2 имеет конструктор, который...

Объявление объекта класса fstream в качестве статической компоненты другого класса - C++
Доброго времени суток. Есть задание, в котором говорится &quot;...Перепишите программы из упражнений 4 и 6 таким образом, чтобы использовать...

Создание объекта класса с полем являющимся объектом другого класса - C++
Bill a; cin&gt;&gt;a;//тут я ввел с помощью перегруженного оператора ElementSpiska c; //поля у Spiska(Bill A,int,string,int) ...

Ошибка компиляции (преобразование объекта класса в объект другого класса) - C++
Друзья, добрый день! Не могу понять почему выдается ошибка компиляции... Прога преобразует доллары США в старые Британские фунты. Но...

Объявление объекта одного класса в описании другого класса - C++
Здравствуйте. Почему при объявлении Student s в классе Teacher не возникает ошибки? Ведь такой объект уже существует. И почему при...

Вспомогательный класс для сокращения кода при создании другого класса - C++
Добрый день. Есть код: template&lt;int floor&gt; struct Collection { template&lt;typename T&gt; struct WithBath { ...

29
Croessmah
Эксперт CЭксперт С++
13413 / 7564 / 855
Регистрация: 27.09.2012
Сообщений: 18,618
Записей в блоге: 3
Завершенные тесты: 1
18.10.2012, 06:38 #2
если требуется доступ к приватным полям, то копайте в сторону friend
0
alsav22
5421 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
18.10.2012, 08:19 #3
Определение класса two поставьте первым и :
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
...
void seta(two &b2)
        {
        a=b2.getb();
        }  
...
    
int main()
    {
    one a1;
    two b2;
    a1.seta(b2);
    
    return 0;   
    }
1
Croessmah
Эксперт CЭксперт С++
13413 / 7564 / 855
Регистрация: 27.09.2012
Сообщений: 18,618
Записей в блоге: 3
Завершенные тесты: 1
18.10.2012, 10:23 #4
Если у Вас класс one зависит от класса two, при этом класс two зависит от класса one и объявлен после класса one, то при компиляции класса one компилятор еще ничего не знае про класс two, собственно по этому и возникает ошибка. Чтобы ошибки не было необходимо перед классом one поставить
C++
1
class two;
это скажет компилятору что класс two существует и объявлен где-то далее
1
alsav22
5421 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
18.10.2012, 10:34 #5
Добавлено через 2 минуты
Цитата Сообщение от Croessmah Посмотреть сообщение
Чтобы ошибки не было необходимо перед классом one поставить: class two;
Это не помогает.
Цитата Сообщение от Croessmah Посмотреть сообщение
собственно по этому и возникает ошибка.
И не только поэтому. Как компилятор должен понять, что такое b2?
0
AnreyKazakov
Заблокирован
18.10.2012, 10:36  [ТС] #6
Цитата Сообщение от alsav22 Посмотреть сообщение
Это не помогает.
ТОчно, а было бы решением всех проблеи я не могу поставить two перед one
тк класс two тоже должен вызывать объект класса one. Т.е. ситуация не поменяется...

Добавлено через 1 минуту
Цитата Сообщение от alsav22 Посмотреть сообщение
Как компилятор должен понять, что такое b2?
Я знаю, что проблема в этом, я не знаю как ее решить
0
alsav22
5421 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
18.10.2012, 10:39 #7
Цитата Сообщение от AnreyKazakov Посмотреть сообщение
Я знаю, что проблема в этом, я не знаю как ее решить
Я вам написал как. Что не устраивает? Этот код выдаёт ошибку?
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
#include <iostream>
 
class two
    {
    public:
    int getb()
        {
        return b;   
        }
    void seta(int _b)
        {
        b=_b;   
        }
    private:
    int b;  
    };  
 
class one
    {
    public:
    int geta()
        {
        return a;   
        }
    void seta(int _a)
        {
        a=_a;   
        }
    void seta(two &b2)
        {
        a=b2.getb();
        }    
    private:
    int a;  
    };
    
 
    
int main()
    {
    one a1;
    two b2;
    a1.seta(b2);
    
    return 0;   
    }
0
AnreyKazakov
Заблокирован
18.10.2012, 10:50  [ТС] #8
Цитата Сообщение от alsav22 Посмотреть сообщение
Я вам написал как. Что не устраивает? Этот код выдаёт ошибку?
Ну е мае написал же
Цитата Сообщение от AnreyKazakov Посмотреть сообщение
я не могу поставить two перед one
тк класс two тоже должен вызывать объект класса one
Там с классами с этими совсем чехарда получилась
0
alsav22
5421 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
18.10.2012, 10:55 #9
Если пример кода выкладываете, то он должен соответствовать тому, с которым работает. Тут телепатов нет. Где у вас в коде two работает с one?
0
AnreyKazakov
Заблокирован
18.10.2012, 11:01  [ТС] #10
Ок, тогда вопрос, можно ли убрать ошибку в функции void seta() в классе one НЕ меняя порядок расположения классов в программе? кстате так тоже не пашет

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
#include <iostream>
 
class one
    {
    public:
    void seta();
    int geta()
        {
        return a;   
        }
    void seta(int _a)
        {
        a=_a;   
        }
    private:
    int a;  
    };
    
class two
    {
    public:
    int getb()
        {
        return b;   
        }
    void seta(int _b)
        {
        b=_b;   
        }
    private:
    int b;  
    };  
 
int main()
    {
    one a1;
    two b2;
    return 0;   
    }       
 
void one::seta()
        {
        a=b2.getb();
        /*вот здесь ругает*/
        }
Добавлено через 58 секунд
Цитата Сообщение от alsav22 Посмотреть сообщение
Где у вас в коде two работает с one
Это только пример, было бы можно классы местами поменять я бы наверно не спрашивал
0
alsav22
5421 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
18.10.2012, 11:04 #11
Цитата Сообщение от AnreyKazakov Посмотреть сообщение
Это только пример, было бы можно классы местами поменять я бы наверно не спрашивал
Ещё раз повторяю, тут телепатов нет. Ответ даётся на конкретный впрос, по конкретному коду. Перед тем как пример выкладывать, нужно подумать, соответствует ли он тому, что хотите выяснить.
1
ValeryS
Модератор
6651 / 5060 / 470
Регистрация: 14.02.2011
Сообщений: 16,919
18.10.2012, 11:06 #12
Цитата Сообщение от AnreyKazakov Посмотреть сообщение
я не могу поставить two перед one
тк класс two тоже должен вызывать объект класса one.
вот так это делается
C++
1
2
3
4
5
6
7
8
9
class one;
class two
{
............
}
class one
{
.........
}
1
AnreyKazakov
Заблокирован
18.10.2012, 11:06  [ТС] #13
Решил общего наследника сделать, НО, как бэ проблема не решена. С такой структурой, если в таком духе работать получится каша сплошная...
0
AnreyKazakov
Заблокирован
18.10.2012, 11:15  [ТС] #14
Цитата Сообщение от ValeryS Посмотреть сообщение
вот так это делается
ну вот сделал я
так

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
#include <iostream>
 
class one;
class two;
 
int main()
    {
    one a1;
    two b2;
    return 0;   
    }       
 
class one
    {
    public:
    void seta()
        {
        a=b2.getb();
        }   
    int geta()
        {
        return a;   
        }
    void seta(int _a)
        {
        a=_a;   
        }
    private:
    int a;  
    };
    
class two
    {
    public:
    int getb()
        {
        return b;   
        }
    void seta(int _b)
        {
        b=_b;   
        }
    private:
    int b;  
    };

Возможен ли класс для обработки объекта другого класса?
0
ValeryS
Модератор
6651 / 5060 / 470
Регистрация: 14.02.2011
Сообщений: 16,919
18.10.2012, 11:25 #15
Цитата Сообщение от AnreyKazakov Посмотреть сообщение
ну вот сделал я
сам то можешь объяснить словами что ты делаешь или хотел сделать
кто такой b2 ???
еще раз взаимное использование классов
например так
C++
1
2
3
4
5
6
7
8
9
10
11
class one;
class two
{
one * A
............
}
class one
{
.two* B
........
}
или так
C++
1
2
3
4
5
6
7
8
9
10
11
class one;
class two
{
friend class one;
............
}
class one
{
 
........
}
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.10.2012, 11:25
Привет! Вот еще темы с ответами:

Объявление в классе объекта другого класса - C++
какая-то фигня получается, допустим есть 2 класса - class1 и class2, в хедерах class1.h подключён class2.h, а в class2.h подключён...

Передача данных объекта одного класса , объекту другого - C++
Доброго времени суток. В общем, столкнулся с проблемой передачи данных от одного класса другому. Есть класс NewApp, создаю объект с...

Спрятать указатель на функцию класса в map и вызвать из другого объекта - C++
Товарищи, пишу примитивный &quot;tcp-сервер&quot;. В его задачи входит принятие соединений и получение сообщений. В зависимости от сообщения &quot;сервер&quot;...

Обрыв функции при вызове метода из объекта другого класса - C++
Почему выполнение функция обрывается на вызове метода из объекта другого класса? DataBuffer.cpp //Получаем класс FirstDlg void...


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

Или воспользуйтесь поиском по форуму:
15
Yandex
Объявления
18.10.2012, 11:25
Ответ Создать тему
Опции темы

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