Перейти к содержанию
    

visual_wind

Участник
  • Постов

    8
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный

Информация

  • Город
    Array
  1. То SmSp: По-моему, мы вместо помощи человеку начали разводить флейм и нарываемся на бан. И камень преткновения - что же на самом деле объявлено - указатель на массив из двух TBase или массив из двух указателей на TBase. Обратимся непосредственно к K&R: "Таким образом, если массив daytab передается некоторой функции f, то эту функцию можно было бы определить следующим образом f( char daytab[2][13] ){...} Вместо этого можно записать f( char daytab[][13] ){...} поскольку число строк здесь не имеет значения, или f( char (*daytab)[13] ){...} последняя запись декларирует, что параметр есть указатель на массив из 13 значений типа char. Скобки здесь необходимы, так как квадратные скобки [] имеют более высокий приоритет, чем *. Без скобок декларация f( char *daytab[13] ){...} определяет массив из 13 указателей на char. В более общем случае только первое измерение (соответствующее первому индексу) можно не задавать, все другие специфицировать необходимо" © K&R, стр.111-112, изд.2-е, переработанное,1992. Насколько я понимаю, у VladimirYU все в порядке в том коде, который он привел.
  2. To SmSp: Мое видение проблемы: У VladimirYU в том коде, что он привел, ошибок нет. Он НЕ объявлял указатель на массив из двух TBase, для чего надо использовать объявление TBase (*Obj)[2]. Он объявил массив из двух указателей на TBase, для чего и использовал правильное объявление TBase *Obj[2]. Это разные вещи, согласитесь. Чтобы не пускаться дальше в дискуссию об указателях на указатели и о том, что обозначает имя массива, я в Visual C++ Express Edition 2008 собрал простенький пример. class TBase { private: char char1; char char2; public: TBase( char c1, char c2 ): char1( c1 ), char2( c2 ) {} void Method1(){ cout << char1 << char2; } virtual ~TBase(){} }; TBase* tb[2] = { NULL, NULL }; int _tmain(int argc, _TCHAR* argv[]) { tb[0] = new TBase( '1', '2' ); tb[1] = new TBase( '3', '4' ); tb[0]->Method1(); tb[1]->Method1(); delete tb[0]; delete tb[1]; return 0; } У меня этот код работает правильно и печатает "1234". Можете проверить у себя. На мой взляд, проблема у VladimirYU в другом, но пока не понятно в чем.
  3. To SmSp: Могу и ошибаться. Чтоб лишний раз не спорить, предлагаю посмотреть Кернигана/Ричи, стр.111, последний абзац. Что касается приоритетов, то поскольку приоритет оператора[] выше приоритета оператора*, то использовать скобки в варианте TBase *(Obj[2]) смысла нет, а в варианте TBase (*Obj)[2] скобки как раз меняют приоритеты, то есть, сначала operator*, затем operator[], затем TBase. Итого, Obj есть указатель (operator*) на массив (operator[]) из двух ([2]) TBase.
  4. To VladimirYU: Так а стало понятно, что не работает в варианте с массивом, или, поскольку все заработало в варианте без массива, то все ок и дальше нет смысла копаться? Если есть необходимость разбираться дальше: Из-под ссей можно еще просмотреть корректность работы оператора new (в разных ли местах выделяется память под рассматриваемые два экземпляра и с правильными ли параметрами вызываются конструкторы TBase). Возможно, кстати, что класс TBase перегружает operator new и там какой-то глюканат из-за оптимизации, например. Если есть полное описание класса TBase, можно еще после конструирования попытаться проверить корректность инициализации переменных класса TBase конструктором. Если полного описания класса нет, а только интерфейс, шанс еще есть в анализе дизассемблерного кода.
  5. Druid3, я тоже как-то пробовал Scilab/Scicos, а именно - в контексте моделирования силовых преобразователей частоты. Версия была 5.х, но одна из ранних (тогда 5-я только появилась). Конечно же, этот пакет ввиду его абсолютной бесплатности перспективен, но на тот момент его использование мною остановилось по следующим причинам: 1. Понятия не имею, какая оконная библиотека использовалась при написании Scicos, но выглядит весьма ограничено и работает весьма тормозово. 2. Тулбокс, аналогичный SimPowerBlockset, сделан на основе языка Modelica. Вот какой в этом смысл? В тулбоксе не было моделей двигателей (никаких). Для создания собственной модели ее необходимо писать именно на этом языке и компилировать отдельным modelica-компилером. Только вот беда, хз, какого стандарта он придерживается. Те modelica-модели двигателей, что я нашел в инете, встроенный компилер компилить отказывался. 3. Скорость работы модели совершенно неудовлетворительная. В самих дэмках для силового тубокса не приводится сложных моделей в принципе. Когда начинаешь создавать что-то сложное, начинают переть глюки графического редактора. 4. Custom C-function, которые я очень часто использую в Sumulink во избежание лишнего оверхеда, в Scicos имеют значительно меньше возможностей (уже точно и не припомню, чего мне не хватало, но впечатление осталось устойчивое). 5. Собственноручно написанные компоненты с множественными настройками работают медленнее, чем в Simulink, ввиду отсутствия аналога симулинковских tlc-скриптов. Итог. Scilab/Scicos можно использовать разве что для самых что ни есть базовых вещей и никак для разработки даже средней сложности, то есть его перспективность на данный момент чрезвычайно мала. Если проводить аналогию, то OpenOffice несопоставимо лучше заменяет M$O, а Линукс - Винды , чем Scilab/Scicos заменяет Matlab/Simulink. Так какой смысл студентам его учить на данном этапе? И еще. Насколько я понимаю, перспективы развития того и ли иного фри-проекта в первую очередь зависят от количества разработчиков со всего мира, которые в нем участвуют. В случае Scilab мы имеем ограничение, связанное с языком, на котором он написан. Конечно же я дремуч, но Druid3, скажи честно, неужели ты когда-нибудь слышал о языке программирования Objective Caml до того, как поставил Scilab? В итоге, развитием Scilab занимаются, в основном, французы из университета Inria (так, кажется, правильно) и больше почти никто. Так что и перспективы достаточно туманны...
  6. To SmSp: В этом случае получится не массив из двух указателей на TBase, а указатель на массив из двух TBase. В коде, который привел VladimirYU, вроде все правильно, возможно, траблы были именно в реализации конструктора TBase или функции-члена Method1(), которые автор не привел.
  7. Возможно, поможет следующее http://www.mathworks.com/support/solutions...lution=1-72HW09
×
×
  • Создать...