Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Не могу определить статическое поле класса
|
|||
|---|---|---|---|
|
#18+
Создал свой класс со статическим полем. Компилятор написал: авторundefined reference to 'MyClass::MyVariable' Попробовал под классом определить статическую переменную: Код: plaintext 1. и получит такую ошибку: авторmultiple definition of 'MyClass::MyVariable' Тогда добавил ключевое слово extern: Код: plaintext 1. и создал cpp- файл: Код: plaintext 1. Получил такую ошибку: Код: plaintext 1. 2. Как сделать верно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2018, 13:15 |
|
||
|
Не могу определить статическое поле класса
|
|||
|---|---|---|---|
|
#18+
Всем спасибо, вопрос решен! Надо было только в cpp- файле написать: Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2018, 14:40 |
|
||
|
Не могу определить статическое поле класса
|
|||
|---|---|---|---|
|
#18+
Это лишнее Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2018, 14:40 |
|
||
|
Не могу определить статическое поле класса
|
|||
|---|---|---|---|
|
#18+
AlekseySQL, если ты объявляешь класс в заголовочном файле, член этого класса с префиксом static должен быть объявлен там же - внутри класса. Этот статический член будет один единственный для всех cpp модулей, которые включают этот заголовочный файл. Иными словами, доступ к такому члену из любого cpp модуля будет осуществляться по одному и тому же адресу в памяти (синглет). Никакой extern, при этом, делать не надо, так как cpp модули, включающие заголовочный файл со статическим членом внутри класса, уже знают о нём. Префикс extern используется только в случае, если тебе надо объявленную в cpp модуле переменную "экспортировать" в другой cpp модуль. Переменные, объявленные внутри модуля как static экспортировать нельзя - не получится, но если очень хочется, можно экспортировать объявленную в cpp модуле функцию, которая будет возвращать указатель/ссылку на объявленную как static переменную в этом модуле. Это же азы, ёшки-матрёшки! Как же ты пишешь на C++ не зная всех этих особенностей? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2018, 14:51 |
|
||
|
Не могу определить статическое поле класса
|
|||
|---|---|---|---|
|
#18+
rdb_devПрефикс extern используется только в случае, если тебе надо объявленную в cpp модуле переменную "экспортировать" в другой cpp модуль. Наоборот, чтобы "импортировать" из другого модуля. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2018, 17:48 |
|
||
|
Не могу определить статическое поле класса
|
|||
|---|---|---|---|
|
#18+
rdb_devAlekseySQL, если ты объявляешь класс в заголовочном файле, член этого класса с префиксом static должен быть объявлен там же - внутри класса. Этот статический член будет один единственный для всех cpp модулей, которые включают этот заголовочный файл. Иными словами, доступ к такому члену из любого cpp модуля будет осуществляться по одному и тому же адресу в памяти (синглет). Никакой extern, при этом, делать не надо, так как cpp модули, включающие заголовочный файл со статическим членом внутри класса, уже знают о нём. Префикс extern используется только в случае, если тебе надо объявленную в cpp модуле переменную "экспортировать" в другой cpp модуль. Переменные, объявленные внутри модуля как static экспортировать нельзя - не получится, но если очень хочется, можно экспортировать объявленную в cpp модуле функцию, которая будет возвращать указатель/ссылку на объявленную как static переменную в этом модуле. Это же азы, ёшки-матрёшки! Как же ты пишешь на C++ не зная всех этих особенностей? Верен только 1й абзац. В С++ модулей пока еще нет, и не надо путать с единицами компиляции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2018, 22:41 |
|
||
|
Не могу определить статическое поле класса
|
|||
|---|---|---|---|
|
#18+
Про шаблоны забыли Если в шаблоне надо завести статическую переменную, а её нельзя вынести в cpp-файл, то это можно сделать внутри статического метода-геттера. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2018, 05:09 |
|
||
|
Не могу определить статическое поле класса
|
|||
|---|---|---|---|
|
#18+
SiemarglВ С++ модулей пока еще нет, и не надо путать с единицами компиляции.Считай, что мой "cpp модуль", это твоя "единица компиляции". Так нормально? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2018, 14:58 |
|
||
|
Не могу определить статическое поле класса
|
|||
|---|---|---|---|
|
#18+
rdb_devSiemarglВ С++ модулей пока еще нет, и не надо путать с единицами компиляции.Считай, что мой "cpp модуль", это твоя "единица компиляции". Так нормально?так правильно. тогда и 3й абзац годится ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2018, 15:07 |
|
||
|
Не могу определить статическое поле класса
|
|||
|---|---|---|---|
|
#18+
SiemarglСчитай, что мой "cpp модуль", это твоя "единица компиляции". Так нормально?так правильно. тогда и 3й абзац годится[/quot]Просто нужно было проникнуться смысловым значением слова "модуль". ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2018, 21:21 |
|
||
|
Не могу определить статическое поле класса
|
|||
|---|---|---|---|
|
#18+
rdb_devSiemarglСчитай, что мой "cpp модуль", это твоя "единица компиляции". Так нормально?так правильно. тогда и 3й абзац годитсяПросто нужно было проникнуться смысловым значением слова "модуль". ;)[/quot] модули и их нюансы обсуждаются как будущий стандарт С++. механика там поменяется ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2018, 22:52 |
|
||
|
Не могу определить статическое поле класса
|
|||
|---|---|---|---|
|
#18+
Siemarglrdb_devAlekseySQL, если ты объявляешь класс в заголовочном файле, член этого класса с префиксом static должен быть объявлен там же - внутри класса. Этот статический член будет один единственный для всех cpp модулей, которые включают этот заголовочный файл. Иными словами, доступ к такому члену из любого cpp модуля будет осуществляться по одному и тому же адресу в памяти (синглет). Никакой extern, при этом, делать не надо, так как cpp модули, включающие заголовочный файл со статическим членом внутри класса, уже знают о нём. Префикс extern используется только в случае, если тебе надо объявленную в cpp модуле переменную "экспортировать" в другой cpp модуль. Переменные, объявленные внутри модуля как static экспортировать нельзя - не получится, но если очень хочется, можно экспортировать объявленную в cpp модуле функцию, которая будет возвращать указатель/ссылку на объявленную как static переменную в этом модуле. Это же азы, ёшки-матрёшки! Как же ты пишешь на C++ не зная всех этих особенностей? Верен только 1й абзац. Почему же? последний и предпоследний абзацы также верны... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2018, 14:47 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=39628417&tid=2017888]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
109ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
41ms |
get tp. blocked users: |
1ms |
| others: | 321ms |
| total: | 509ms |

| 0 / 0 |
