6 / 6 / 5
Регистрация: 05.04.2016
Сообщений: 67
|
|||||||||||
1 | |||||||||||
Наследование шаблонных классов: найти причины возникновения ошибки в коде и исправить эту ошибку18.01.2017, 12:08. Показов 1471. Ответов 14
Метки нет (Все метки)
подскажите почему появляется такая ошибка
error C2248: 'Base<int,float>::value1' : cannot access protected member declared in class 'Base<int,float>'
0
|
18.01.2017, 12:08 | |
Ответы с готовыми решениями:
14
Найти причины возникновения ошибки в коде и исправить эту ошибку Найти причины возникновения ошибки в коде и исправить эту ошибку Найти причины возникновения ошибки в коде и исправить эту ошибку Найти причины возникновения ошибок в коде и исправить эти ошибки (наследование) |
859 / 448 / 112
Регистрация: 06.07.2013
Сообщений: 1,491
|
||||||
18.01.2017, 12:19 | 2 | |||||
Потому что, если ты наследуешься от Base<T1, T2>, это не значит что ты можешь обращаться к значениям от отдельной переменной Base<T1, T2> b;
0
|
Модератор
|
|||||||
18.01.2017, 12:19 | 3 | ||||||
.
0
|
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
18.01.2017, 12:24 | 4 |
0
|
6 / 6 / 5
Регистрация: 05.04.2016
Сообщений: 67
|
|
18.01.2017, 12:30 [ТС] | 5 |
почему Chaild, а не конструктор Base?
другими словами: при любом наследовании конструктор базового класса не имел бы доступа к протектовым данным родителя
0
|
859 / 448 / 112
Регистрация: 06.07.2013
Сообщений: 1,491
|
|
18.01.2017, 12:32 | 6 |
потому что дело не в конструкторе Base, а в том, какие значения в него передаются из Child
0
|
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
18.01.2017, 12:37 | 7 |
Сообщение было отмечено Lunix как решение
Решение
что бы запустить конструктор базового класса,
вам нужно передать в него аргументы. а их ещё нужно сначала откуда то достать. вы пытаетесь их достать из защищённой секции данных. а посколько чаилд не обладает правами доступа, то в его скоупе операция запрещена.
0
|
6 / 6 / 5
Регистрация: 05.04.2016
Сообщений: 67
|
|
18.01.2017, 12:50 [ТС] | 8 |
а можно еще как нибудь инстанцировать обьект Child обьектом Base и двумя другими аргументаи, как будет выглядеть тогда конструктор Caild'a и обьявлние обьекта Child <Base , int, float>ch (b1, 3,4.2); ?
0
|
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|||||||||||
18.01.2017, 14:22 | 9 | ||||||||||
классика жанра:
я у вас там ошибки поправил некоторые. есть ещё паттерн "шаблонный друг" позволяет не используя ключевого слова friend как бы объявлять друзьями сразу множество классов: http://rextester.com/BVY53014
4
|
6 / 6 / 5
Регистрация: 05.04.2016
Сообщений: 67
|
|
18.01.2017, 19:24 [ТС] | 10 |
подскажите что делает эта строчка(49)?
Добавлено через 42 минуты я понял, это типа typedef-a... )
0
|
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|||||||||||
22.01.2017, 16:00 | 15 | ||||||||||
у нас есть шаблон:
однако, кем бы ни был этот объект, его класс имеет некий заранее ожидаемый нами enum
наличие такого енума означает, что тип объекта отвечает нашим требованиям, и нас случайно не поломает. то бишь, мы можем ему доверять. по сути - этот тот же самый friend, только таким образом можно зафредить сразу множество классов.
3
|
22.01.2017, 16:00 | |
22.01.2017, 16:00 | |
Помогаю со студенческими работами здесь
15
Найти причины возникновения ошибки "heap corruption detected after normal block #331" и исправить эту ошибку Найти причины возникновения ошибок в коде и исправить эти ошибки Найти причины возникновения ошибок в коде и исправить эти ошибки Найти причины возникновения ошибок в коде и исправить эти ошибки Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |