Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Visual C++/MFC/WTL > Использование #include в eVC++... Как?


Автор: AndronST 7.8.2005, 14:38
Приветсвую форумчан и гостей форума!
Недавно пересел с Builder на eVC++, естессно полезли грабли... Недавно наткнулся на самые большие - работа c #include... Собсна вопрос: как нужно инклудить заголовочные файлы, чтобы не возникало подобной ошибки : Calculator.obj : error LNK2005: "class CCalculator * Calculator" (?Calculator@@3PAVCCalculator@@A) already defined in adderdlg.obj
У меня есть 2 файла с моими классами, хедэр одного проинклуден в хедэре другого и этот уже инклудится в других файлах... А поскольку клас из второго файла используется в одном модуле... короче, получается мой класс 2 проинклуденным в одном файле... В Билдере это не фатально, а здесь билд не проходит... Люди, подскажите плиз как нуна с инклудами здесь обращаться?

Автор: sergejzr 7.8.2005, 15:01
Чтобы не подключалось по несколько раз одно и тоже в начале каждого файла пиши:

Код

#ifndef FILENAME_H
#define FILENAME_H
//здесь содержимое твоего файла
#endif


Где FILENAME_H естественно название твоего файла.

Автор: AndronST 7.8.2005, 15:32
2sergej.z
Thanks! Навел на мыслю на правильную smile я к ней 2 дня шел...

Ларчик как всегда открывался просто... меня переклинило, и я в заголовочнике объявил переменную... она то как раз и объявлялась несколько раз... поставил extern и все, естессно, заработало smile... eVC оказался не причем...

Автор: Denn 8.8.2005, 08:25
sergej.zЛучше #pragma once

Автор: sergejzr 8.8.2005, 11:24
Цитата(Denn @ 8.8.2005, 07:25)
sergej.zЛучше #pragma once

Denn, не лучше smile. Короче, но не лучше.


Автор: ManiaK 8.8.2005, 11:27
Цитата(sergej @ 8.8.2005, 12:24)
Denn, не лучше . Короче, но не лучше.


Согласен. Это инициатива мелкософта. Попользовался неделю - отучивался месяц. Лучше не использовать.

Автор: Denn 8.8.2005, 12:36
Почему? Для совместимости с другими компиляторами?

Автор: ManiaK 8.8.2005, 12:58
Цитата(Denn @ 8.8.2005, 13:36)
Почему? Для совместимости с другими компиляторами?

Совместимость тут особой роли не играет. Просто лучше не брать вредных привычек, чтобы не отвыкать от них.

Автор: Амортизатор 8.8.2005, 16:02
Почему же не играет? Самое лучшее - старательно следовать родному стандарту языка хотя бы в синтаксисе, чтобы не подсесть на "удобные" фичи разных IDE. Ибо IDE - сегодня есть завтра нет, а С++ - вечен.

Автор: Earnest 9.8.2005, 06:54
Согласна насчет стандарта в коде. Однако возможности IDE тоже грех не использовать. Для ленивых (сама такая) напоминаю, что IDE - штука расширяемая. Можно написать команды, которые в пустые файлы вставляют шаблонный текст, сгенерированный по каким-то правилам. Например, у нас в конторе макрос в h-файлы вставляет "скобки" #ifndef XXX - #endif, в cpp - слова про DEBUG_NEW, а также добавляет теги для VSS, чтобы записывалось, кто файл трогал и комментарии по этому поводу.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)