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

Взаимодействие классов - C++

Восстановить пароль Регистрация
 
r00712
0 / 0 / 0
Регистрация: 07.09.2013
Сообщений: 108
12.05.2014, 18:43     Взаимодействие классов #1
Допустим, в первом классе у нас объявлена какая-либо переменная, например проинициализированная строка, объявленная в секции private. Как в другом классе использовать эту переменную, пишет "Необъявленный идентификатор". Заголовочный файл первого класса подключен.

P.S с уважением, полный нуб в ООП
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zss
Модератор
Эксперт С++
 Аватар для zss
5953 / 5558 / 1787
Регистрация: 18.12.2011
Сообщений: 14,204
Завершенные тесты: 1
12.05.2014, 18:47     Взаимодействие классов #2
1.Сообщение должно быть о недоступности private членов.

2."Необъявленный идентификатор" означает об ошибке в написании идентификатора.

3. Для доступа из производного класса переменные надо объявить как protected.
r00712
0 / 0 / 0
Регистрация: 07.09.2013
Сообщений: 108
12.05.2014, 19:00  [ТС]     Взаимодействие классов #3
Для доступа из производного класса
Но класс не наследуется! Должен?)

Добавлено через 3 минуты
Сообщение как раз о необъявленном идентификаторе, можно ли объявить его как "Имя первого класса::переменная"?

Добавлено через 7 минут
Ситуация такова: в первом классе есть QTableView *view1; в этом же классе под view1 отводится память. В соседнем классе нам нужно использовать стандартную функцию reset:
C++
1
 view1->reset();
Однако компилятор не распознает view1 как переменную, так как в этом классе она необъявлена, а объявлена и соседнем. Как правильно обратиться?
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
12.05.2014, 20:53     Взаимодействие классов #4
Ты вообще не понимаешь суть классов! Поля классов это не переменные! Вообще, класс это не набор переменных - это пользовательский тип данных!
Ярослав Никитин
 Аватар для Ярослав Никитин
0 / 0 / 2
Регистрация: 13.04.2014
Сообщений: 70
12.05.2014, 21:22     Взаимодействие классов #5
Кусок из аккоунт.h
C++
1
2
3
4
5
6
7
8
9
10
11
class Account
    {
        private:
            char* ID;
        public:
            Account (void); /*Конструктор*/
            ~Account(void);/*Деструктор*/
            void    setID(char*);
            char*   getID();
 
    };
КЛАСС::ОБЪЕКТ:
Акоунт.cpp
C++
1
2
3
4
5
6
7
8
9
void Account::setID(char* id)
    {
        ID = id;
    }
 
    char* Account::getID()
    {
        return ID;
    }
далее:
C++
1
2
3
4
5
6
7
#include "Account.h"
using Program::Account;
...
Account a("0");
 
    a.setID("1223123");
    cout << a.getID() << endl;

Как то так

Добавлено через 1 минуту
Наверно это забыл:
C++
1
using Program::Account;
r00712
0 / 0 / 0
Регистрация: 07.09.2013
Сообщений: 108
12.05.2014, 21:36  [ТС]     Взаимодействие классов #6
В таком случае пишет "Program не является именем класса или пространства имен"
Ярослав Никитин
 Аватар для Ярослав Никитин
0 / 0 / 2
Регистрация: 13.04.2014
Сообщений: 70
12.05.2014, 21:43     Взаимодействие классов #7
В заголовочном так должно быть
C++
1
2
3
4
namespace Program
{
 
}
То есть:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#pragma once //Чтобы файл один раз подключался
 
namespace Program /*ЭТО не забывай*/
{
    class Account
    {
        private:
            char* ID;
        public:
            Account (void);
            ~Account(void);
            void    setID(char*);
            char*   getID();
    };
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.05.2014, 22:03     Взаимодействие классов
Еще ссылки по теме:

Взаимодействие с сайтами C++
C++ Как реализовать взаимодействие классов в игре "Змейка"
Взаимодействие классов C++

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

Или воспользуйтесь поиском по форуму:
r00712
0 / 0 / 0
Регистрация: 07.09.2013
Сообщений: 108
12.05.2014, 22:03  [ТС]     Взаимодействие классов #8
Все же считает, что view1 - необъявленный идентификатор. Кажется, понял, в чем дело. Чтобы работать с view1, которая содержится в первом классе, нужно сначала создать объект этого класса. Он создается, но в главной функции main, а второй класс не знает, что нужно работать именно с тем объектом. Как их связать?

Добавлено через 12 минут
Тоесть в главной функции у меня есть
C++
1
MainWindow window;
в этом классе находится view1.
Так же есть класс Searchfam. В его cpp-ом файле есть такая строка
C++
1
view1->reset();
Но чтобы работать с view1, нужен объект класса MainWindow. Он создается в main'e, но класс Searchfam об этот не догадывается и не знает, что это view1 должно принадлежать именно тому объекту - window.

Добавлено через 2 минуты
точнее view1 уже принадлежит объекту window, а
C++
1
view1->reset();
должно работать с этим объектом.
Yandex
Объявления
12.05.2014, 22:03     Взаимодействие классов
Ответ Создать тему
Опции темы

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