Здравствуйте, гость ( Вход | Регистрация )
Влад | Дата 30.11.2011, 10:11 |
И даже более того - даже если эту переменную объявить в хидере как статическую, в каждую единицу компиляции будет включен свой экземпляр переменной. Какие любопытные эффекты могут возникнуть оттого, что программист думает, что обращается к глобальной переменной x, а на самом деле обращается только к экземпляру, существующему только в данной единице компиляции - | |
Iron Bug | Дата 30.11.2011, 7:19 |
потому что int x - это объявление переменной. а предварительная декларация - это extern int x. переменные (не статические) нельзя объявлять в заголовочниках в принципе. |
|
rp80 | Дата 29.11.2011, 19:19 |
1. Потому что x это глобальная переменная и она должна быть определена заранее. Ну что глобальная то да. Но мне кажется дело в другом. А именно, что линковщику кажется, что она определена 2 раза. Так как a.h заинклуден и в a.cpp и в main.cpp. А модификатор статик делает ее видимой только в файле a.h и поэтому линкуется нормально. Мне больше непонятен вопрос 2. |
|
sidsukana | Дата 29.11.2011, 16:53 |
1. Потому что x это глобальная переменная и она должна быть определена заранее.
|
|
rp80 | Дата 29.11.2011, 16:20 |
a.h
a.cpp
main
Если убираем static в a.h, получаем ошибку линковки multiple definition of `N::x'. Со статиком же компилится, линкуется и выводит 300 и 25. Вопросы: 1. Почему ошибка без статик? 2. Почему 300 и 25? Спасибо. |
|
Просмотр темы полностью (откроется в новом окне) | |
Текстовая версия | Сейчас: 29.3.2024, 12:59 |