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

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

Войти
Регистрация
Восстановить пароль
 
Tiva
94 / 94 / 1
Регистрация: 25.04.2012
Сообщений: 429
#1

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

11.12.2012, 17:55. Просмотров 590. Ответов 12
Метки нет (Все метки)

есть примерно такой код
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" не объявленный идентификатор. почему я не могу получить доступ к полям дружественного класса?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.12.2012, 17:55     Поля дружественного класса
Посмотрите здесь:

Вызов функций класса Dictionary функциями дружественного класса - C++
Функции класса Tree используют функции дружественного класса Dictionary,но вылетают ошибки,не находятся определения функций класа...

Объявление дружественного класса внутри класса - C++
class A{ friend class B{ B(A &amp;a); } } Подскажите пожалуйста, такое возможно или нет, я хотел чтобы...

Метод дружественного класса - C++
Нужно сделать такую ​​задачу, но дойшовшы к этому: выбрать заданное число N абитуриентов, имеющих высокий средний балл (метод...

Использование дружественного класса - C++
Нужно что бы классы стали общее дружеские вложенные классы поидее в книге написано можно добавить всего лишь к примеру friend class Remote;...

Вызов функций дружественного класса - C++
У меня есть 2 класса Tree и Dictionary,которые являются друзьями class Tree; class Dictionary { friend class Tree; class...

Объявление дружественного класса в приватной области - C++
class A { public: A(){} private: void Alg(){} friend class B; };

Перенести методы дружественного класса в подключаемый файл - C++
Добрые люди, в отчаянии прошу помощи. Голова уже пухнет, не могу понять что куда откуда и как. Необходимо перенести описание всех методов...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
gray_fox
What a waste!
1443 / 1172 / 61
Регистрация: 21.04.2012
Сообщений: 2,446
Завершенные тесты: 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++
3586 / 1366 / 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++
3586 / 1366 / 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!
1443 / 1172 / 61
Регистрация: 21.04.2012
Сообщений: 2,446
Завершенные тесты: 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!
1443 / 1172 / 61
Регистрация: 21.04.2012
Сообщений: 2,446
Завершенные тесты: 3
11.12.2012, 18:10     Поля дружественного класса #10
Цитата Сообщение от Tiva Посмотреть сообщение
выражение слева от ".name" должно представлять класс, структуру или объединение
Т.к. поле не статическое нужен объект класса.
MrGluck
Модератор
Эксперт CЭксперт С++
7158 / 4324 / 630
Регистрация: 29.11.2010
Сообщений: 11,745
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++
Здравствуйте. тока начал изучение С++; составляю прогу практически по учебнику - реализация класса Стринг при компиляции компилятор...

Написание дружественного оператора >> для Класса "Wine" с private родителем - C++
Изучаю С++ по Прате. В задание столкнулся с проблемой написания дружественного оператора&gt;&gt; для Класса &quot;Wine&quot; с private родителем ...

Перегрузка дружественного оператора вывода в шаблонном классе - C++
Здравствуйте! Я не могу понять как мне правильно сделать перегрузку оператора вывода ввывода в шаблонном классе ...

Поля класса - C++
здравствуйте ) извините заранее если глупый вопрос :sorry: я просто новичок) class mycl { public: char a, b; }; ...

поля класса - C++
Задача заключается в поиске площади треугольника через класс. Программой должна быть предусмотрена проверка корректности ввода сторон...


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

Или воспользуйтесь поиском по форуму:
go
Эксперт C++
3586 / 1366 / 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     Поля дружественного класса
Ответ Создать тему
Опции темы

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