| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Visual C++/MFC/WTL > Visual C++. Проблема с глобальным массивом. |
| Автор: spleaner 5.6.2007, 12:50 | ||||||
| Добрый день! Мучаюсь с небольшой (но довольно срочной:( ) проблемой.. Имею проект test в visual C++ 8 (windows forms) имеются, как всегда, файлы test.h и test.cpp . в test.cpp находятся несколькой функций, глобальных переменыых и (!) нужный мне глобальный массив.. объявляю его (до написания всех функций и до #include "test.h") так:
пробывал и так:
но в любом случае, при вызове первой функции и попытке его обнулить (хотя бы тупо перебором в цикле)
ничего не происходит:( В нем как были, так и остаются "левые" значения... (типа 11191934, 11191940, 0, 0, 20 и т.п.) А мне нужно, чтобы была возможность изменять его и из test.cpp и из test.h (ну и считывать, разумеется) Подскажите пожалуйтся, как его правильно объявить и как правильно к нему обращаться :( |
| Автор: zkv 5.6.2007, 13:28 | ||||
| честно говоря, не очень понял, что тебе нужно, может это: в одном (и только одном) из cpp файлов определяем массив глобально (те вне тел функций):
затем в других файлах, где хотим увидеть этот массив предварительно объявляем его (можно делать сколько угодно раз):
помогло? |
| Автор: spleaner 5.6.2007, 14:07 | ||
| нет :( не помогло:( чтобы было понятней - напишу подробней.. вот код файла noti.cpp (собственно проблемы лезут отсюда).. p.s. все лишнее - убрал.. чтобы не засорять
во время исполнения цикла включаю пошаговый режим и там четко видно, что элементы массива не изменятся:( вот скрин: ![]() т.е. он пытается присвоить значение abc[k] , но там все равно остается "19878028" (ну в каждом элементе массива по-разному).. |
| Автор: zkv 5.6.2007, 14:13 | ||
| spleaner, так ты смотришь на значение ячейки ДО того как она обнулена, там просто мусор валяется. как то больше принято
глаз режет |
| Автор: spleaner 5.6.2007, 14:20 |
| наверно просто скриншот не удачный вот так: ![]() ниодним элемент не обнулился.. (с 10го по 34ый элемент - нолики, т.к. он изначально такой создается.. после 34 опять фигня всякая) |
| Автор: Fazil6 5.6.2007, 14:24 | ||||
у тебя случаем точки с запятой нет в строке?
и еще нет ли объявления
в test.h ? |
| Автор: spleaner 5.6.2007, 14:37 |
нет конечно чуть выже же висит код файла.. нету.. а даже если бы и было - я ведь смотрю watch'ем в прям времени этот цикл пощагово.. и ничего не происходит.. |
| Автор: zkv 5.6.2007, 14:41 |
| spleaner, если я скажу, что так не бывает, тебе это поможет? попробуй на всякий случай повыводить элементы куда нить (в файл например) чтобы убедится, что watcher не врет |
| Автор: spleaner 5.6.2007, 14:45 |
| zkv за 3 минуты то того, как обновил страницу поступил аналогично - и не поверил watcher'у... Сделал еще один цикл. Забил в строку символов все значения массива (в массиве было 2,2,2,0,4,3 и дальше нули) хоть вотчер и показывал всякую фигню - в строке оказалось то, что нужно... Видимо то, что показывал watcher - это не значения, а что-то типа адресов переменных (хотя утверждать не берусь - сам в этом, как видно, не силен) Тогда вопрос - а как же следить за массивом в пошаговом режиме? (хотя сейчас лично мне это не актуально) Всем совет - не верьте вотчеру |
| Автор: Rapalex 5.6.2007, 14:50 |
| spleaner, смотрю я на это: И понимаю что ты не на сях пишеш а на C++/CLR, ты малость разделом ошибся идиты на .NET. В шарпе есть Gaebage Collector, а что в этом ужазним си, я если честно не знаю. Может он и есть, может он тебе массив и удаляет, незнаю. Поидее в .нет все переменные в классах должны быть обявлениы, там даже функций глобальных нет!!! да и классы все по пространствам имён раскиданы. Да и вообще!!!! нафиг тебе глобальные переменные, во всех книгах написано что так делать НЕ желательно!!! |
| Автор: spleaner 5.6.2007, 15:02 |
| Rapalex если честно, я сам не фанат Си++, уже давно пишу на #.. Но с преподами по "Визуальным системам программирования" не поспоришь.. Вот и приходится мучатся.. Не задумывался на тему что принято и что нет, делаю для того, чтобы отвзались.. Но столкнувшись с такой проблемой был удивлен и решил разузнать что да как.. Всем спасибо за помощь |
| Автор: SenkraD 5.6.2007, 15:13 |
| [offtop] spleaner, программа использующая .NET Framework гараздо медленее любой проги на С++ с использованием MFC или иной GUI библиотеки по определению. И если ты пишеш на C# то мог бы и этот массив в класс запихнуть бы это было бы более правильно, да и более привычно для тебя [/offtop] |
| Автор: nerezus 5.6.2007, 17:22 | ||
Разница порядка десятка-двух процентов. |
| Автор: SenkraD 5.6.2007, 18:05 |
| [offtop] nerezus, когда мы работали со скинированиям это процент почти до половины дорос, хотя мы ускоряли как могли. Мы думали, что это мы дураки, но когда поискали по инету, то нашли кучу вопросов о том как ускорить когда работу проги когда у тебя за 100 контролов и ещё, не дай бог, скины ибо начинались такие тормоза с прорисовкой, что мама не горюй. В итоге всю визуальную часть переписали на Builder, а не визуальную (сервисы и всё в этом духе) на VC. Щас прога летает (гдето 130 кнопок со скинами, реклама - фильмы, гифки, флеш, и ещё куча скинированных контролов), ни одного подтормахивание, в то время когда на шарпе мы видели как кнопка одна за одной рисуется и, ещё раз повторю, не одни мы такой фигню наблюдали [/offtop] P.S. Всё завязываем эти религиозные войни в отдете WinAPI |
| Автор: nerezus 5.6.2007, 18:15 |
| SenkraD, я сравнивал на 3Д графике питон и С++. Разница была примерно 10-15%. для дотнета, говорят, еще меньше, не проверял, но склонен верить, т.к. дотнет будет все же немного быстрее питона. Добавлено через 2 минуты и 49 секунд P.S. питон: на дохлой видюхе(какой-то сапфир) при 800*600*32 выдавал под 2.5К FPS на 40k полигонах |