Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
Fireman Гость
|
Добавлено: Пт Ноя 22 2002 09:27 Заголовок сообщения: Еще один вопрос про классы |
|
|
Итак я опять про свой двунаправленный список
template < class OBJECT > class list...
Я его использовал в следующей функции:
list < unsigned int > find( char* lpszFindString ) ...
НО привызове такой функции она безнадежно виснет, а не виснет такая:
void find( char* lpszFindString, list < unsigned int > & FindResult )
Неужто придется получать значение через такую ... методику? Почему не сработал 1 метод? |
|
Вернуться к началу |
|
|
Fireman Гость
|
Добавлено: Пт Ноя 22 2002 09:53 Заголовок сообщения: Я решил эту проблемму - какой кошмар этот C++ :) - Но все равно есть вопросик |
|
|
Все дело было в том, что когда я манипулировал с классом, его деструктор работал фиг знает как. Например он выглядел так (для двунаправленного списка):
list::~list( void ) { while( !amount ) remove( ) ; }
где amount - количество элементов, а remove - функция удаляющая элемент N0.
Пришлось переделать деструктор в такой вид
list::~list( void ) { if ( !amount ) return ;
while( !amount ) remove( ) ; }
НО я так и не понял, что же он делал когда у него amount = 0. Ведь while не должен был выполняться - Так чем же при удалении списка с нулевым размером был не доволен C ? |
|
Вернуться к началу |
|
|
Борис Гость
|
Добавлено: Пт Ноя 22 2002 16:56 Заголовок сообщения: C++ вообще или M$ VC++ в частности? |
|
|
Извиняюсь, но это не C++ вообще, а конкретная реализация/библиотека в частности. Не нравятся предлагаемые библиотеки, делай свое. А в твоем варианте, похоже, есть лишний восклицательный знак. То есть функция должна была выглядеть так:
list::~list( void ) { while( amount ) remove( ) ; } |
|
Вернуться к началу |
|
|
Fireman Гость
|
Добавлено: Пт Ноя 22 2002 18:02 Заголовок сообщения: Re: C++ вообще или M$ VC++ в частности? |
|
|
Блин точно со знаком Больщое спасибо!
Что касается первой части (грозной и ругательной) то ее не совсем понял.
Что именно мне не нравится? Все что придоставляет C++ я стараюсь использовать (особенности VC не в счет ибо мне эту прогу возможно придется под другую систему компилировать)
А на предыдущее сообщение (с #include) ответить можешь? |
|
Вернуться к началу |
|
|
Борис Гость
|
Добавлено: Пт Ноя 22 2002 18:38 Заголовок сообщения: Re: C++ вообще или M$ VC++ в частности? |
|
|
>>Что именно мне не нравится? Все, что предоставляет C++, я стараюсь использовать (особенности VC не в счет, ибо мне эту прогу, возможно, придется под другую систему компилировать)
Я хотел сказать, что в данном случае виноват не C++, так как он вообще не регламентирует реализацию списков, а виновата конкретная библиотека, которая некорректно реализует деструктор объекта типа "список". Поэтому, если предлагаемая библиотека делает что-то не так, как ты считаешь нужным, нужно просто сделать свой вариант нужной функции или класса и использовать его. Многие функции в M$ правильно работают только в специальном окружении, а оно частенько не описывается, поэтому ругань относится к M$, а не к тебе. Я также постоянно переписываю многие функции и классы, так как предоставляемые мне не нравятся по разным причинам. И, вообще, M$ -- это, нет, лучше промолчу, так как клиенты, хочешь, не хочешь, принуждают писать под M$.
>> >>А на предыдущее сообщение (с #include) ответить можешь?
начинай все *.h-файлы строками: #ifndef МЕТКА #define МЕТКА
далее нужный текст
в конце строка: #endif
Делай все заголовочные файлы по такой схеме и радуйся жизни (enjoy life), вставляя строку #include хоть сколько раз хоть где. |
|
Вернуться к началу |
|
|
Борис Гость
|
Добавлено: Пт Ноя 22 2002 18:50 Заголовок сообщения: Кстати, сообщи дамам и господам, как ты умудрился в текст знак "меньше" вставить? Или здешний модератор, наконец, раз |
|
|
- |
|
Вернуться к началу |
|
|
Fireman Гость
|
Добавлено: Сб Ноя 23 2002 18:45 Заголовок сообщения: Re: Кстати, сообщи дамам и господам, как ты умудрился в текст знак "меньше" вставить? Или здешний модератор, наконец, |
|
|
Знак < и > а также & и т.п. приходится писать так:
< & lt > & gt & &amp " &quot
Блин - IE позволяет писать & ltтекст а Netscape требует пробела после |
|
Вернуться к началу |
|
|
Fireman Гость
|
Добавлено: Сб Ноя 23 2002 18:49 Заголовок сообщения: #define |
|
|
Да вот еще - ну чтоб я понял уж точно:
мне нужно в начале файла *.h вставлять такой код (например для подключения библиотеки math.h)
#if !define math.h #include < math.h > #endif
или как-то по другому? где же там #define |
|
Вернуться к началу |
|
|
Chea Гость
|
Добавлено: Сб Ноя 23 2002 20:31 Заголовок сообщения: Re: #define |
|
|
1. Предлагаю несколько другой вариант В тексте *.h файлов ставить #if !define __math__h__ # define __math__h__
Текст файла
#endif // __math__h__ |
|
Вернуться к началу |
|
|
fkts Гость
|
Добавлено: Сб Ноя 23 2002 22:52 Заголовок сообщения: Re: #define |
|
|
1. Директива #include не подключает никаких библиотек (библиотеки подключаются при линковке), а именно находит и тупо вставляет в текст программы указанный файл.
2. В .h файле обычно содержатся объявления классов, функций, внешних переменных, констант, макросов и пр. Без этих объявлений компиляция исходника или вообще невозможна (в случае С++) или происходит с ошибками (С, но может и проскочить).
3. Повторное объявление (класса, функции и пр.) является ошибкой, чтобы этого не допустить используются стражи включения - в заголовочный файл вставляется следующая конструкция: === #ifndef _УНИКАЛЬНОЕ_ИМЯ_ /* Можно и #if !defined */ #define _УНИКАЛЬНОЕ_ИМЯ_
Сам текст заголовка
#endif === Работает это следующим образом: при первом включении заголовка макрос _УНИКАЛЬНОЕ_ИМЯ_ еще не определен - условие выполняется - определяется _УНИКАЛЬНОЕ_ИМЯ_ и обрабатывается текст заголовка. При последующих включениях _УНИКАЛЬНОЕ_ИМЯ_ уже определен и текст заголовка пропускается. |
|
Вернуться к началу |
|
|
Fireman Гость
|
Добавлено: Вс Ноя 24 2002 00:39 Заголовок сообщения: Re: #define |
|
|
Т.е. если у меня в 2 разных файлах используются функции библиотеки iostream.h, то код должен выглядеть в каждом файле таким образом:
#if !defined iostream.h #define iostream.h #endif |
|
Вернуться к началу |
|
|
Борис Гость
|
Добавлено: Пн Ноя 25 2002 13:57 Заголовок сообщения: Re: #define |
|
|
Нет, просто во ВСЕХ твоих файлах (которым нужна данная библиотека) должно стоять #include & lt; iostream.h & gt; А сам файл iostream.h записан так, что повторных определений не будет. |
|
Вернуться к началу |
|
|
Борис Гость
|
Добавлено: Пн Ноя 25 2002 14:16 Заголовок сообщения: Проба знаков меньше-больше (-) |
|
|
< < > > |
|
Вернуться к началу |
|
|
Борис Гость
|
Добавлено: Пн Ноя 25 2002 14:58 Заголовок сообщения: Re: #define (повтор) |
|
|
Нет, просто во ВСЕХ твоих файлах (которым нужна данная библиотека) должно стоять (сколько хочешь раз) #include < iostream.h > А сам файл iostream.h записан так, что повторных определений не будет. |
|
Вернуться к началу |
|
|
|