Printable Version of Topic
Click here to view this topic in its original format |
Forums > Глюкодром > туплю в c++ |
Posted by: Lexus on 14-11-2010, 00:12 | ||||||||
Имеетъся 2 класса (Cell, Node) и основная програмулина da.cpp В классах Cell и Node надо сделать поинтеры друг на друга. Гугл сказал нужно Forward referenz делатъ, но что-то я так и не допёр ![]() Исходники таковы: cell.h
cell.cpp
Node.h
Node.cpp
В DA создаётъся обект Node и Cell и поинтерывают друг на друга. Ну что-то я запутался во всём этом перекрёстном поинтерование. Заранее спасибо за помощь |
Posted by: Set on 14-11-2010, 02:15 | ||||
Forward declaration это, пример http://www.adp-gmbh.ch/cpp/forward_decl.html (http://www.adp-gmbh.ch/cpp/forward_decl.html #include "Node.h", #include "Cell.h" - друг в друга не надо, просто:
Указывается, что есть такой класс, а определение его будет потом. |
Posted by: Lexus on 14-11-2010, 14:16 |
Странно как-то вышло. Visual Studio компилирует и всё пашит, г++ ругается: : undefined reference to Пример по ссылке тоже не компилиться g++ |
Posted by: Lexus on 14-11-2010, 14:33 |
Проблема решена. не знал, что компайлеру нужно каждый файл указывать как апраметр ![]() |
Posted by: FiL on 14-11-2010, 16:58 | ||
|
Posted by: Lexus on 14-11-2010, 17:35 | ||||
![]() ![]() |
Posted by: FiL on 14-11-2010, 17:59 |
куда - понятно. Рядом с cpp и h файлами. А вот как его писать - тут я тебе не помошник. Но ты уже начинай разбираться, ибо если прокт вырастет за пределы 3-х файлов то по-любому придется. А тренироваться лучше на кошечках ![]() |
Posted by: Lexus on 18-11-2010, 14:49 | ||
Дело идёт дальше. Уже есть картинки ![]() ![]()
Так как всё будет бегать на квадкоре, то хотелось бы эти операции замультрейдить и где "здесь" удастовериться, что трейды отработали, продолжить дальше отрабстывать код. С трейдами ниразу ничего не делал, на что стоит обратить внимание и как их использовать? |
Posted by: Lord KiRon on 18-11-2010, 18:40 | ||
Кстати, глядя на картинку - рекомендую IPP: http://software.intel.com/en-us/articles/intel-ipp/ (http://software.intel.com/en-us/articles/intel-ipp/ думаю тебе прегадится, да и все операции там уже внутри мультистредные и мультикорные. К тому же есть версия и для винды и для Линикса. |
Posted by: FiL on 18-11-2010, 19:40 |
дык ему-то надо под солярис ![]() |
Posted by: Lexus on 18-11-2010, 20:22 | ||
![]() |
Posted by: Lord KiRon on 18-11-2010, 21:00 | ||
|
Posted by: Lexus on 18-11-2010, 21:03 |
а можно это как-то проверить? Какая-нибудь минипрожка, я профу бы скинул, чтоб он под солярисом попробывал бы скомпилировать. |
Posted by: Lord KiRon on 19-11-2010, 00:15 |
Гугл наше все: http://condor.depaul.edu/~dmumaugh/readings/handouts/CSC343/unixthreads.html (http://condor.depaul.edu/~dmumaugh/readings/handouts/CSC343/unixthreads.html |
Posted by: Lexus on 19-11-2010, 00:24 | ||
|
Posted by: Lord KiRon on 19-11-2010, 02:01 | ||||
Вообще потоки это не гарантия что будет быстрее, если не понимать что делать скорее гарантия того что будут проблемы, лучше запускай всего один (второй) и в нем обновляй по таймеру. И про синхронизацию не забудь а то будет весело. |
Posted by: FiL on 19-11-2010, 05:26 | ||||
|
Posted by: Lexus on 11-02-2011, 18:10 |
Напоролся на след. грабли. Имеется пара файлоф-калссов. Под виндой компилиться, под линуксом тоже. В солярисе ругается на каждую строчку. делал даже "хелло ворлд" - под виндой и линуксом идёт, под солярисом орёт. Как выяснилось ему не нра переходы строк. Так как если это файло открыть под солярисом, что-то измеить и сохранить. То это же перестаёт компилиться под виндожсом. Говорит, что не одинаковые переходы строк. Можно как-то сделать всё посовместимей? |
Posted by: VxWorks on 11-02-2011, 20:51 |
В винде переход строк CR,LF а в линуксах только LF. Есть IDE, которые позволяют менять тип перехода строк в зависимости от типа софта. Из простых, под винду, есть такой Emeral Editor, к которому можно подцепить makefile и все такое. Этот редактор понимает линуксовые переходы строк. Вопрос только в том, поймет ли их твой toolchain ![]() ЗЫ: только сегодня мне пришлось решать задачу распараллеливания на два процессора. Вернее, на процессор и сопроцессор. То еще счастье, надо заметить ![]() |
Posted by: Lexus on 11-02-2011, 21:11 |
А почему тогда под линуксом нормально компилируется, а пот солярисом орёт. Во всех случая г++ |
Posted by: VxWorks on 11-02-2011, 21:13 |
Может, линукс к этому более пофигистично стал относиться, кто его знает ![]() |
Posted by: Lexus on 11-02-2011, 21:35 |
попробую ту програмулинку. |
Posted by: izanoza on 12-02-2011, 21:17 |
Командная строка тебе в помощь: dos2unix unix2dos |
Posted by: Lexus on 18-02-2011, 10:31 | ||
Только заметил такой прикол. На некоторых файлах не до конца срабатывала прога. На них было вариантом открыть под маком в TextWrapper там выбрать юникс и UDF-8, По умолчанию был какой-то UDF-8 BOM. Если изначально такое сделать, без дос2юникс, то всёравно были ошибки. Теперь засунул в юниксовском формате всё в студию и теперь пашит как на винде, так в солярисе. |
Posted by: Lexus on 20-05-2011, 11:37 | ||
Опять ламерский вопрос![]()
имеется файлик с такими данными, надо его в ся считать в double array. Как ничего не нашёл я, как парсить ![]() |
Posted by: Set on 21-05-2011, 01:29 |
http://bytes.com/topic/c/answers/618936-how-do-i-split-char-array-c (http://bytes.com/topic/c/answers/618936-how-do-i-split-char-array-c |
Posted by: Lexus on 21-05-2011, 08:39 | ||
|
Posted by: Lexus on 09-06-2011, 21:58 | ||
Ламерствую дальше ))) Имеется класс Tree. В мэйн части проги в начале создаются порядка 10000 обектов вида Node. Пихаются в Tree потом вызывается команда Tree2D->BuildTree(); После идёт очень мучительная симуляция в while блоке, в которй Tree2D используется и его нужно через определённые интервалы времени или проходов перестраивать. делается это по средствам: Tree2D->BuildTree(); Но прога вылетает через некоторое кол-во обновлений, так как память с 6мб выжирается до 500-700мб. Если Билдтри не делать, то память не жрётся. Вопрос в том, как делать ребилд дерева без зажирания памяти.
|
Posted by: boriskin on 10-06-2011, 23:26 |
Иметь на каждый new соответствующий delete, который ьудет подчишать выделенную память как только она становится не нужна. |
Posted by: Lexus on 11-06-2011, 00:03 | ||
_WorkList.clear(); _TreeList.clear(); из List не удаляют объекты с памяти, а просто удаляются со списка? Как бы так сказать ,я не совсем представляю, где delete вставлять))))) |
Posted by: Set on 11-06-2011, 02:23 |
Пройдись циклом по обеим спискам и delete все объекты. Только потом clear(). Возможно где ещё в коде надо объекты удалять... не разобрать. А вообще выкинуть нафиг этот c++ ![]() |
Posted by: Lexus on 11-06-2011, 11:46 | ||
Симуляция длится примерно 2000-3000 сек, За это время эта команда вызывается уйму раз))) Дабы структуру дерева оптимировать. память жрётся только при вызове этой команды ![]() Спасибо за совет, буду пробывать!!! |
Posted by: Lord KiRon on 11-06-2011, 14:50 | ||||||
Все что тебе нужно это для каждого списка перед вызовом clear пройтись по всему списку , что то типа:
|
Posted by: Lexus on 11-06-2011, 14:55 |
Спасибо!!! Вот так из математиков становятся програмистами))))))) хоть и хреновыми))))) |
Posted by: FiL on 11-06-2011, 17:56 |
вообще судя по мануалу clear вызывает деструктор у каждого элемента перед его удалением. Так что по идее память должна освобождаться. LExus, ты проверь, у тебя деструктор память освобождает или где. P.S. я далеко не спец в сях, но что-то меня сильно смущает эффективность данного кода. Неужто перестроить списки нельзя как-то без удаления и создания с нуля? Уж очень оно странно. |
Posted by: Lexus on 11-06-2011, 22:48 |
У меня есть определённые обекты (Cell). в них значения дифф.уравнения. Созфаётся huffman tree где Nodes содержат пропизводные или другие оператроы от уравнений (rate). хуффмантри используется для семплинга элемнтов. Учитывая его структуру доступ к элементам с наибольшей rate намного короче, чем если бы я это делал в бинарном дереве или просто в массиве. Учитывая что уравнение меняется во время симуляции, нужно перестраивать дерево, дабы оптимайзить скорость доступа. До этого было у меня без _WorkList.clear(); _TreeList.clear(); но у меня было макс. 400 nodes, сейчас проблема 2D со 100 Nodes, отсюда 100*100 в дереве. И оно уже вылетает от обжорства. A как проверить, высвобождает или нет? |
Posted by: Set on 12-06-2011, 01:38 |
http://stackoverflow.com/questions/307082/cleaning-up-an-stl-list-vector-of-pointers (http://stackoverflow.com/questions/307082/cleaning-up-an-stl-list-vector-of-pointers Как красиво можно чистить списки. ![]() |
Posted by: Lord KiRon on 12-06-2011, 08:36 | ||
|
Posted by: boriskin on 22-06-2011, 16:32 | ||
|
Posted by: boriskin on 22-06-2011, 16:35 | ||
|