Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Архив форумов ЦИТФорума
Море(!) вопросов - Море(!) ответов
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
Как правильно задавать вопросы

Еще один вопрос про классы

 
Перейти:  
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование
Предыдущая тема :: Следующая тема  
Автор Сообщение
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 записан так, что повторных определений не будет.
Вернуться к началу
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2002 phpBB Group
Русская поддержка phpBB

 

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 6608306, ICQ 232284597
Пресс-релизы — pr@citforum.ru
Послать комментарий
Информация для авторов
This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2006 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...