э-э, в форум для начинающих...
От: kuru  
Дата: 09.10.01 16:12
Оценка:
у меня на 3 штуки *.cpp — 1 штука *.h, проблема в том что он=MVC++ включает эту 1 штуку *.h три раза. вроде все делаю как надо:

#ifndef _*_h_
#define _*_h_

... // — это мои прототипы;)

#endif

и в каждом *.cpp — #include "*.h"

и еще в сабж:
можно ли сделать (и как!) статический класс (полностью) или лучше сразу структуру?

ps * — все имена вымышленные;)
pps еще раз прошу прощение за такие ламерские вопросы...
Re: э-э, в форум для начинающих...
От: Андрей Тарасевич Беларусь  
Дата: 09.10.01 16:44
Оценка:
Здравствуйте kuru, Вы писали:

K>у меня на 3 штуки *.cpp — 1 штука *.h, проблема в том что он=MVC++ включает эту 1 штуку *.h три раза. вроде все делаю как надо:


K>#ifndef _*_h_

K>#define _*_h_

K>... // — это мои прототипы;)


K>#endif


K>и в каждом *.cpp — #include "*.h"


Так в чем проблема-то? Для того заголовочные файлы и предназначены, чтобы их включать везде, где надо.

K>и еще в сабж:

K>можно ли сделать (и как!) статический класс (полностью) или лучше сразу структуру?

Опять непонятно. В С++ принципиальной разницы между классами и структурами нет. Что имеется в виду под "лучше" ?
Best regards,
Андрей Тарасевич
Re: э-э, в форум для начинающих...
От: volk  
Дата: 10.10.01 06:45
Оценка:
Здравствуйте kuru, Вы писали:

K>у меня на 3 штуки *.cpp — 1 штука *.h, проблема в том что он=MVC++ включает эту 1 штуку *.h три раза. вроде все делаю как надо:


K>#ifndef _*_h_

K>#define _*_h_

K>... // — это мои прототипы;)


K>#endif


K>и в каждом *.cpp — #include "*.h"



Про многократное подключение '*.h' ("...symbol already defined in module...").
Сталкивался с этой проблемой много раз. Очень похоже, что это глюк линковщика. В доказательство могу привести следующий случай. Класс С оформлен так:
class C{ ...
private:}.
Разумеется, в программе есть много чего еще. При этом линковщик выдает несколько сообщений об ошибках. А если убрать бессмысленный "private:", то все работает как надо.

Бороться с этим сложно. Иногда помогает полная перестройка программы. Никаких ошибок не будет, если каждый подключаемый модуль представляет собой отдельный класс. Наоборот, они часто проявляются, если принципы ООП нарушаются, например, если в программе ООП перемешано с глобальными данными и функциями.
Тот, кто желает, но не делает, распространяет чуму.
Re: э-э, в форум для начинающих...
От: migel  
Дата: 10.10.01 08:27
Оценка:
Здравствуйте kuru, Вы писали:

K>у меня на 3 штуки *.cpp — 1 штука *.h, проблема в том что он=MVC++ включает эту 1 штуку *.h три раза. вроде все делаю как надо:


K>#ifndef _*_h_

K>#define _*_h_

K>... // — это мои прототипы;)


K>#endif


K>и в каждом *.cpp — #include "*.h"


K>и еще в сабж:

K>можно ли сделать (и как!) статический класс (полностью) или лучше сразу структуру?

K>ps * — все имена вымышленные;)

K>pps еще раз прошу прощение за такие ламерские вопросы...
Скорее всего у тебя в хедере весят объявления переменных
ну типа:
////*.h file
int myVariable; /// <<<!!!!!Here!!!!!!
/// end of *.h File
лечится просто:

////*.h file
extern int myVariable; /// <<<!!!!!Here!!!!!!
/// end of *.h File
и в одном(!) *.cpp файле объявляй ее без экстерн
int myVariable; /// <<<!!!!!Here!!!!!!


Статический класс сделать можно — обяви все его методы и члены как статик только не забудь что все статики должны быть где-то размещены (хорошее место — отдельный файл, для всго этого барахла).
Re: э-э, в форум для начинающих...
От: Lenikur Россия  
Дата: 10.10.01 11:20
Оценка:
По поводу статического класса: скорее всего, тебе нужно действовать через пространство имен (namespace).
А по поводу хэдерных файлов, попробуй #pragma once, как я понял (может и не правильно) эта директива решает твою проблему.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.