Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Singleton, ошибки линкера
|
|||
|---|---|---|---|
|
#18+
Добрый день! Есть простой код: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. Выдает ошибки: Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2010, 15:07 |
|
||
|
Singleton, ошибки линкера
|
|||
|---|---|---|---|
|
#18+
Репослав, В .cpp добавьте: Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2010, 15:15 |
|
||
|
Singleton, ошибки линкера
|
|||
|---|---|---|---|
|
#18+
Точно, спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2010, 15:20 |
|
||
|
Singleton, ошибки линкера
|
|||
|---|---|---|---|
|
#18+
РепославТочно, спасибо! Поосторожнее, члены класса всегда нужно инициализировать _явно_. Как и любые переменные. Это не шарп. Ну кроме статических членов - они по умолчанию ноль. Тут я стат. члена проинициализировал для красоты. Что бы чувство опасности не раздражало при беглом просмотре, оно же глупое. =)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2010, 15:24 |
|
||
|
Singleton, ошибки линкера
|
|||
|---|---|---|---|
|
#18+
petrav, как так для красоты? Программа ведь без этой инициализации не работает. З.Ы. Только сейчас понял, что слово "неразрешенный" в ошибке значит не "запрещенный"=) Иногда все-таки лучше нелокализованные продукты=) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2010, 17:03 |
|
||
|
Singleton, ошибки линкера
|
|||
|---|---|---|---|
|
#18+
Репославpetrav, как так для красоты? Программа ведь без этой инициализации не работает. В моем коде два пункта: 1. Определение (definition) статической переменной. 2. Инициализация этой переменной. Но работало бы и так: Код: plaintext Стат. переменную я инициализировал (= NULL) просто так, что бы взгляд не цеплялся за объявление без инициализации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2010, 19:03 |
|
||
|
Singleton, ошибки линкера
|
|||
|---|---|---|---|
|
#18+
Подскажите, столкнулся с похожей проблемой, а для чего нужно снаружи инициализировать статическую переменную, разве в статической ф-ии не происходит ее инициализация? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.04.2017, 13:57 |
|
||
|
Singleton, ошибки линкера
|
|||
|---|---|---|---|
|
#18+
da17Подскажите, столкнулся с похожей проблемой, а для чего нужно снаружи инициализировать статическую переменную, разве в статической ф-ии не происходит ее инициализация? Нужно не инициализировать статическую переменную, а определять её. (инициализировать при этом вовсе не обязательно). Дело в том, что строка "объявления" статической переменной в классе является только объявлением (declaration) в смысле С++, но не является определением (definition). Поскольку в С++ (и С) используется модель раздельной компиляции исходных модулей, а заголовок класса может включаться во многие модули, невозможно правильно определить (define) статическую переменную класса в заголовке, это можно сделать только в исходном модуле (.cpp), руками (поскольку компилятору неизвестно в каком именно модуле программист захочет это сделать). Это также должно быть сделано только один раз, иначе будет нарушение ODR. Это всё предписывается стандартом С++. P.S. пропустил. da17Подскажите, столкнулся с похожей проблемой, а для чего нужно снаружи инициализировать статическую переменную, разве в статической ф-ии не происходит ее инициализация? В статической или какой-то другой функции определение переменной глобальной области видимости (в смысле linkage) (какой является статическая переменная класса) вообще невозможно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.04.2017, 16:00 |
|
||
|
Singleton, ошибки линкера
|
|||
|---|---|---|---|
|
#18+
MasterZiv, спасибо. Т.е. я правильно понял, в статической функции мы только ссылаемся на статическую переменную, а определена она уже должна быть заранее? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.04.2017, 16:53 |
|
||
|
Singleton, ошибки линкера
|
|||
|---|---|---|---|
|
#18+
Если хочется вставить инициализацию внутрь класса, то можно так извернуться Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Правда пользоваться не очень красиво получается Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.04.2017, 17:03 |
|
||
|
Singleton, ошибки линкера
|
|||
|---|---|---|---|
|
#18+
Dima T, да я что-то предположил, что Код: sql 1. 2. 3. 4. тут и происходит инициализация статической переменной test, но видимо был неправ а что означает это код int a = {0}? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.04.2017, 17:57 |
|
||
|
Singleton, ошибки линкера
|
|||
|---|---|---|---|
|
#18+
da17Dima T, да я что-то предположил, что Код: sql 1. 2. 3. 4. тут и происходит инициализация статической переменной test, но видимо был неправ Неправильно, это при старте проги происходит, т.к. к static public можно обратится не создавая объектов Код: plaintext 1. da17а что означает это код int a = {0}? тоже что и Код: plaintext 1. Деталей не помню, разница в ньюансах, в С++11 это ввели. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.04.2017, 18:15 |
|
||
|
|

start [/forum/topic.php?fid=57&gotonew=1&tid=2018189]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
195ms |
get topic data: |
13ms |
get first new msg: |
9ms |
get forum data: |
3ms |
get page messages: |
61ms |
get tp. blocked users: |
2ms |
| others: | 12ms |
| total: | 322ms |

| 0 / 0 |
