| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Инициализация свойств объекта |
| Автор: Гость_Alexey 13.3.2005, 19:33 | ||
Сразу: пишу в VC++ 6. В общем есть некоторый класс (таблица) и в нем заданы некоторые свойства, ну допустим:
ROW здесь это за-typedef-енный тип структуры (строка таблицы), содержащей определенные поля (скажем, для простоты, что все поля int-овые). В конструкторе объекта создается массив строк таблицы в количестве count. После создания объекта при инициализации полей (в контрукторе обращаюсь к полям через this->DB[индекс].поле и делаю присваивание) выдается Access violation. Чертовщина какая-то... Как бы его отследить и выловить? ЗЫ - сразу извиняюсь, если вопрос покажется ламерским, потому что я только начинаю прогать в области ООП |
| Автор: bel_nikita 13.3.2005, 20:59 |
| Хотелось бы увидеть сам конструктор |
| Автор: Гость_Alexey 14.3.2005, 05:15 | ||||||
Да, пожалуйста.
Инициализация:
Полагаю, тогда и структуры придется расписать для наглядности.
|
| Автор: Да гость я... 14.3.2005, 06:23 | ||
| Сразу скажу, что только бегло просмотрел код. Ряд тривиальных рекомендаций: 1) Нет необходимости явно использовать this. Компайлер за Вас сам это сделает. 2) Вместо struct date я бы использовал тип time_t (что есть просто typedef unsigned long time_t). Во-первых, в 9 раз меньше места занимает, чем у Вас, а во-вторых, имеется полный набор CRT ф-ций для манипуляции с данными этого типа. Если уж так хочется, то можно написать класс-обертку, методы к-рого позволяют а) проиницилизировать переменную time_t и б) получить все нужные вам значения как-то year, month, date etc. Реализация может быть примерно такой:
Хотя есть ещё более простое решение: в БД хранить time_t, а для вместо указанного выше CWTime - использовать MFС/ATL класс - CTime. Для VC6 это класс MFC, а для VC7 - ещё и ATL. Один из конструкторов CTime принимает time_t, а набор его методов более, чем достаточный. ЗЫ: по поводу классов для работы с БД, почему Вам CDaoRecordset не подходит? |
| Автор: Да гость я... 14.3.2005, 06:45 | ||
Ну, просмотрел код
Итак, атрибут класса ROW* DB так и остался неинициализированным. ЗЫ: хоть и ругают венгерскую нотацию, но я лично "m_" для членов класса всегда юзаю. И мне не нравятся более новомодные варианты обозначений вроде atribute_ или _atribute. |
| Автор: Гость_Alexey 14.3.2005, 12:09 | ||
Спасибки, кажется до меня таки дошло в чем дело =) Жалко что мы гости, так бы авторитет поднял =)
Потому что это задание для универа. Сначала пишем управление строками, таблицами, потом выше и выше по иерархии. Если бы не надо было это ручками писать, конечно бы запользовал готовый класс. |
| Автор: Гость_Alexey 14.3.2005, 12:22 | ||||
Браво! Все заработало, стоило только заменить в конструкторе
на
|
| Автор: Guest 14.3.2005, 23:39 | ||
| Гость_Alexey Все-таки полезно юзать "m_" для имен членов класса - описка сразу была бы заметна.
Придется зарегистрироваться... |
| Автор: Vyacheslav 3.6.2005, 13:03 | ||
А разве m_ относится к венгерская нотации? Это просто соглашения, принятые MS |
| Автор: Любитель 7.6.2005, 01:19 |
| Относятся. Просто мелкософт принял венгрескую нотацию. |