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

Доступ к унаследование статической закрытой переменной

02.09.2022, 10:26. Показов 1210. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет. Вот случай: у класса Parent есть статическое поле num_, есть статические сеттер и геттер для него. От него наследуется класс Child.
Затем я создаю два объекта класса child и инициализирую поле num_ через сеттер, указывая пространство имен Child::, затем вывожу значение num_ через геттер второго.
Но компоновщик выдает ошибку - неразрешенный внешний символ "private: static int Parent::num_" (?num_@Parent@@0HA).

Вот код:
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
class Parent
{
public:
    static void set_num(int num)
    {
        num_ = num;
    }
    static int get_num()
    {
        return num_;
    }
 
private:
    static int num_;
};
 
class Child : public Parent
{
 
};
 
void main()
{
    Child child1, child2;
    Child::set_num(1);
    std::cout << "num is " << child2.get_num() << std::endl;
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
02.09.2022, 10:26
Ответы с готовыми решениями:

Реализовать доступ к закрытой переменной
Можно ли в C++ получить доступ к закрытым переменным из класса Two в классе One, без изменения One? На сколько я знаю, друзей можно...

Почему есть доступ к закрытой переменной класса
Привет. Я уже было находил ответ на свой вопрос, но забыл :( Вопрос такой: есть след. класс: class Test { public: void F(Test t) {...

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

4
Модератор
Эксперт Java
 Аватар для alecss131
2863 / 1369 / 409
Регистрация: 11.08.2017
Сообщений: 4,392
Записей в блоге: 2
02.09.2022, 10:45
Лучший ответ Сообщение было отмечено 6sful как решение

Решение

На сколько помню нужно такое определение, вне класса.
C++
1
int Parent::num_ = 0;
1
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
02.09.2022, 11:31
Цитата Сообщение от 6sful Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Parent
{
public:
    static void set_num(int num)
    {
        num_ = num;
    }
    static int get_num()
    {
        return num_;
    }
 
private:
    static int num_;
};
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Parent
{
public:
    static void set_num(int num)
    {
        num_ = num;
    }
    static int get_num()
    {
        return num_;
    }
 
private:
    static inline int num_;
};
0
2 / 2 / 0
Регистрация: 03.05.2020
Сообщений: 33
02.09.2022, 18:41  [ТС]
Цитата Сообщение от DrOffset Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Parent
{
public:
    static void set_num(int num)
    {
        num_ = num;
    }
    static int get_num()
    {
        return num_;
    }
 
private:
    static inline int num_;
};
О, такое тоже работает, но начиная с C++17.
Возможно, вопрос немного неуместный, тк ответ возможно будет слишком объемным, но все же)
А что изменилось в c++17, что такое стало возможным?
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
02.09.2022, 18:51
Лучший ответ Сообщение было отмечено 6sful как решение

Решение

Цитата Сообщение от 6sful Посмотреть сообщение
А что изменилось в c++17, что такое стало возможным?
Просто расширили уже существующий подход с inline-функциями на переменные.

Вот эта штука
C++
1
int Parent::num_ = 0;
ни что иное как определение. Подобное определение вы пишете для функций-членов класса, когда хотите его вынести из класса. Но можно оставить совмещенное объявление с определением такой функции прямо в классе, и в этом случае функция будет inline. Здесь тоже самое, но для переменных.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
02.09.2022, 18:51
Помогаю со студенческими работами здесь

Получить доступ из метода к приватной статической переменной и изменить ее
Добрый день как можно получить доступ из метода в приватный статическую переменную и изменить его. public class Cat { private...

Проблема с взаимодействием динамической и статической памяти - обращение к статической переменной
Здравствуйте! Помогите решить проблему! Задача такая: написать сортировку бинарным деревом, так что бы данные читались из текстового...

Объявление статической переменной и статической функции в классе
Добрый вечер, столкнулся с проблемой и не могу решить. Есть класс SavingsAccount и в нем объявлена статическая переменная для процентной...

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

сохранение значения переменной из закрытой формы
Здравствуйте! У меня есть программа с двумя формами... в Form2 хранится переменная, и мне надо сохранить значение одной из переменных,...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru