Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
1 / 1 / 0
Регистрация: 07.10.2015
Сообщений: 96

Доступ к закрытым членам класса(шаблона)

11.11.2016, 19:04. Показов 1931. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вопрос почему компилятор выдает ошибку в функции main? Ситуация следующая имеется шаблон (класс) элемента списка, реализован шаблон (класс) самого связного списка, в функции main создан список заполнен элементами, но при попытке к обращения к указателю на первый элемент и вызова с помощью его данных, хранящихся в первом элементе, компилятор выдает ошибку.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
узел списка
 
#ifndef LISTNODE_H_
#define LISTNODE_H_
template <class NODETYPE> class List;
 
template <class NODETYPE>
class ListNode{
    friend class List<NODETYPE>;
public:
    ListNode(const NODETYPE &);
    NODETYPE getData()const;
private:
    NODETYPE data;
    ListNode <NODETYPE> *nextPtr;
};
 
template<class NODETYPE>
ListNode <NODETYPE>::ListNode(const NODETYPE & info): data(info), nextPtr(0){}
 
template <class NODETYPE>
NODETYPE ListNode <NODETYPE>::getData()const{return data;}
#endif /* LISTNODE_H_ */
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
класс листа
 
#include <cassert>
#include "ListNode.h"
 
using std::cout;
 
template<class NODETYPE>
 
class List{
 
public:
    List();
    ~List();
    void insertAtFront(const NODETYPE &);
    void insertAtBack(const NODETYPE &);
    bool removeFromFront(NODETYPE &);
    bool removeFromBack(NODETYPE &);
    void contenace(List<NODETYPE>&, List<NODETYPE>&);
    bool isEmpty()const;
    void print()const;
    void clearList();
private:
    ListNode <NODETYPE>* firstPtr;
    ListNode <NODETYPE>* lastPtr;
    ListNode <NODETYPE>* getNewNode(const NODETYPE &);
};
...................................................
...................................................
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
функция main
 
#include <iostream>
using namespace std;
#include "List.h"
 
int main(){
    List<char> L1;
    List<char> L2;
    char X;
    cout<<"введите 5 значений 1го листа \n";
    for(int i=0; i<5; i++){
        cin>>X;
        L1.insertAtBack(X);
    }
    cout<<"введите 5 значений 2го листа \n";
        for(int i=0; i<5; i++){
            cin>>X;
            L2.insertAtBack(X);
        }
    cout<<"\n";
    cout<<"элементы L1+L2 \n";
    L1.contenace(L1,L2);
    L1.print();
    cout<<"L1.firstPtr->data="<<L1.firstPtr->data;// ОШИБКА ЗДЕСЬ
    L1.clearList();
    return 0;
}
Вот что выдает компилятор:
18:58:40 **** Incremental Build of configuration Debug for project List ****
Info: Internal Builder is used for build
g++ -O0 -g3 -Wall -c -fmessage-length=0 -o "src\\List.o" "..\\src\\List.cpp"
In file included from ..\src\List.cpp:11:0:
..\src\List.h: In function 'int main()':
..\src\List.h:25:23: error: 'ListNode<char>* List<char>::firstPtr' is private
ListNode <NODETYPE>* firstPtr;
^
..\src\List.cpp:31:33: error: within this context
cout<<"L1.firstPtr->data="<<L1.firstPtr->data;
^
In file included from ..\src\List.h:5:0,
from ..\src\List.cpp:11:
..\src\ListNode.h:26:11: error: 'char ListNode<char>::data' is private
NODETYPE data;
^
..\src\List.cpp:31:43: error: within this context
cout<<"L1.firstPtr->data="<<L1.firstPtr->data;
^

Почему не возможно получит доступ к этим данным, класс List является другом класса ListNode, следовательно должен иметь доступ к закрытым членам.
Меня смущает, что указатель firstPtr имеет тип ListNode. Помогите понять чего я не догоняю!?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
11.11.2016, 19:04
Ответы с готовыми решениями:

Доступ к закрытым членам базового класса
помогите понять что я не так сделал ? #include &lt;iostream&gt; using namespace std; class A { int PrA1; public: int...

Перегрузка операторов и доступ к закрытым членам
Поясните, пожалуйста, почему, когда при перегрузке операторов, елис как аргумент передается ссылка на обьект класса, то через эту ссылку мы...

Доступ к закрытым элементам класса - Вопрос
Доброго всем времени суток. Итак, столкнулся с одной непонятной вещью, связанной с классами, а точнее с private элементами. Вот код: ...

4
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
11.11.2016, 19:17
Лучший ответ Сообщение было отмечено Maximum_001 как решение

Решение

Цитата Сообщение от Maximum_001 Посмотреть сообщение
Почему не возможно получит доступ к этим данным, класс List является другом класса ListNode, следовательно должен иметь доступ к закрытым членам.
Только доступ-то пытается получить main, которая ему совсем не друг.
1
1 / 1 / 0
Регистрация: 07.10.2015
Сообщений: 96
11.11.2016, 19:27  [ТС]
Я так и понял - надо через функции класса значит. Но ведь объект L1 имеет доступ к дата, через указатель firstPtr и это он вызывает значение дата. Мне казалось, что к main дружественность не имеет ни какого отношения, при рассмотрении в таком контексте.
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
11.11.2016, 19:50
Цитата Сообщение от Maximum_001 Посмотреть сообщение
Мне казалось, что к main дружественность не имеет ни какого отношения, при рассмотрении в таком контексте.
Доступ получает кто? main.
Член класса firstPtr в привате? да.
Какие могут быть вопросы?

Цитата Сообщение от Maximum_001 Посмотреть сообщение
Но ведь объект L1 имеет доступ к дата, через указатель firstPtr и это он вызывает значение дата.
Прежде всего, main пытается получить доступ к firstPtr.
0
1 / 1 / 0
Регистрация: 07.10.2015
Сообщений: 96
11.11.2016, 19:50  [ТС]
Спасибо буду иметь ввиду теперь.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
11.11.2016, 19:50
Помогаю со студенческими работами здесь

Доступ к членам класса
Есть два класса: #include &quot;stdafx.h&quot; #include &lt;iostream&gt; using namespace std; class CPerson { /*закрытые члены*/ private:...

Доступ к членам класса
Объект класса не может получить доступ к своим переменным?

Доступ к защищенным членам класса
Срочно!! помогите пожалуйста Что не правильно : class my { int i; public: ………. }; int main() {

Доступ к private членам класса
Почему при таком объявлении не работает оператор вывода, по идее он же объявлен как друг класса и должен иметь доступ к членам этого...

Дружественная функция-оператор, доступ к закрытым полям класса
У меня есть класс MyClass, вот код: class MyClass { int x, y; public: MyClass(); friend ostream &amp; operator &lt;&lt;...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru