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

Поля дружественного класса - C++

Восстановить пароль Регистрация
 
Tiva
94 / 94 / 1
Регистрация: 25.04.2012
Сообщений: 429
11.12.2012, 17:55     Поля дружественного класса #1
есть примерно такой код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class ClientAuthorization
{
public:
    int count; //считается в конструкторе, не буду писать весь код, а то много получится
    friend class Role;
    void Function();
};
void ClientAuthorization::Function()
{
    for(int i=0; i<count; i++)
        cout<<Role::name[i];
}
class Role
{
public:
    vector <string> name;
}
пишет "name" не объявленный идентификатор. почему я не могу получить доступ к полям дружественного класса?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
11.12.2012, 17:59     Поля дружественного класса #2
Невнимательный я) Определение Role должно быть доступно.

Добавлено через 2 минуты
До обращения к name.
Tiva
94 / 94 / 1
Регистрация: 25.04.2012
Сообщений: 429
11.12.2012, 18:03  [ТС]     Поля дружественного класса #3
Цитата Сообщение от gray_fox Посмотреть сообщение
Невнимательный я) Определение Role должно быть доступно.

Добавлено через 2 минуты
До обращения к name.
у меня каждый класс объявлен в отдельном хедере, и соответственно функции в отдельном цпп.
как быть? надо ли в ClientAuthorization.cpp добавить #include "Role.h"?
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
11.12.2012, 18:04     Поля дружественного класса #4
Цитата Сообщение от Tiva Посмотреть сообщение
Role::name[i];
Через точку.
Tiva
94 / 94 / 1
Регистрация: 25.04.2012
Сообщений: 429
11.12.2012, 18:06  [ТС]     Поля дружественного класса #5
в ClientAuthorization.cpp добавил #include "Role.h"
теперь ошибки такие:
Код
1>clientauthorization.cpp(98) : error C2597: недопустимая ссылка на нестатический член 'Role::name'
1>clientauthorization.cpp(98) : error C3867: Role::name: в вызове функции отсутствует список аргументов; используйте "&Role::name" для создания указателя на член
1>clientauthorization.cpp(98) : error C2109: для индекса требуется массив или указатель
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
11.12.2012, 18:06     Поля дружественного класса #6
Ах да. И смысла в дружественном классе нет.
Tiva
94 / 94 / 1
Регистрация: 25.04.2012
Сообщений: 429
11.12.2012, 18:07  [ТС]     Поля дружественного класса #7
Цитата Сообщение от go Посмотреть сообщение
Через точку.
если оставить #include "Role.h"
то выдает
Код
clientauthorization.cpp(98) : error C2275: Role: недопустимое использование этого типа в качестве выражения
если убрать этот инклюд, то вот такие ошибки:
Код
clientauthorization.cpp(98) : error C2027: использование неопределенного типа "Role"
clientauthorization.cpp(98) : error C2228: выражение слева от ".name" должно представлять класс, структуру или объединение
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
11.12.2012, 18:08     Поля дружественного класса #8
Цитата Сообщение от Tiva Посмотреть сообщение
почему я не могу получить доступ к полям дружественного класса?
Друг имеет доступ , но не наоборот. В любом случае это тут не причём - name всё равно в открытом доступе.
Tiva
94 / 94 / 1
Регистрация: 25.04.2012
Сообщений: 429
11.12.2012, 18:09  [ТС]     Поля дружественного класса #9
почему нет смысла в дружественном классе?
мне надо иметь доступ к полям одного класса в другом, без объявления экземпляров 2-ого класса, в 1-ом.
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
11.12.2012, 18:10     Поля дружественного класса #10
Цитата Сообщение от Tiva Посмотреть сообщение
выражение слева от ".name" должно представлять класс, структуру или объединение
Т.к. поле не статическое нужен объект класса.
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4920 / 2663 / 243
Регистрация: 29.11.2010
Сообщений: 7,410
11.12.2012, 18:12     Поля дружественного класса #11
Tiva, а если б у тебя был массив Role, то какое из name требовалось бы взять?
Либо делай name static, либо так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Role
{
public:
    vector <string> name;
};
 
class ClientAuthorization
{
public:
    int count; //считается в конструкторе, не буду писать весь код, а то много получится
    friend class Role;
    void Function(Role);
};
void ClientAuthorization::Function(Role r)
{
    for(int i=0; i<count; i++)
        cout<<r.name[i];
}
Tiva
94 / 94 / 1
Регистрация: 25.04.2012
Сообщений: 429
11.12.2012, 18:14  [ТС]     Поля дружественного класса #12
спасибо, вроде разобрался
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.12.2012, 22:04     Поля дружественного класса
Еще ссылки по теме:

Метод дружественного класса C++
C++ Написание дружественного оператора >> для Класса "Wine" с private родителем
Перегрузка дружественного оператора вывода в шаблонном классе C++

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

Или воспользуйтесь поиском по форуму:
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
11.12.2012, 22:04     Поля дружественного класса #13
Цитата Сообщение от Tiva Посмотреть сообщение
Сообщение от go Через точку. если оставить #include "Role.h"
то выдает
Я Вам еще раз говорю - обращайтесь через точку.

Добавлено через 3 часа 38 минут
Цитата Сообщение от Tiva Посмотреть сообщение
почему нет смысла в дружественном классе?
Потому что.
Цитата Сообщение от Tiva Посмотреть сообщение
мне надо иметь доступ к полям одного класса в другом, без объявления экземпляров 2-ого класса, в 1-ом.
Сделайте их статическими.
Yandex
Объявления
11.12.2012, 22:04     Поля дружественного класса
Ответ Создать тему
Опции темы

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