Здравствуйте kuru, Вы писали:
K>у меня на 3 штуки *.cpp — 1 штука *.h, проблема в том что он=MVC++ включает эту 1 штуку *.h три раза. вроде все делаю как надо:
K>#ifndef _*_h_ K>#define _*_h_
K>... // — это мои прототипы;)
K>#endif
K>и в каждом *.cpp — #include "*.h"
Так в чем проблема-то? Для того заголовочные файлы и предназначены, чтобы их включать везде, где надо.
K>и еще в сабж: K>можно ли сделать (и как!) статический класс (полностью) или лучше сразу структуру?
Опять непонятно. В С++ принципиальной разницы между классами и структурами нет. Что имеется в виду под "лучше" ?
Здравствуйте 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:", то все работает как надо.
Бороться с этим сложно. Иногда помогает полная перестройка программы. Никаких ошибок не будет, если каждый подключаемый модуль представляет собой отдельный класс. Наоборот, они часто проявляются, если принципы ООП нарушаются, например, если в программе ООП перемешано с глобальными данными и функциями.
Тот, кто желает, но не делает, распространяет чуму.
Здравствуйте 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!!!!!!
Статический класс сделать можно — обяви все его методы и члены как статик только не забудь что все статики должны быть где-то размещены (хорошее место — отдельный файл, для всго этого барахла).
По поводу статического класса: скорее всего, тебе нужно действовать через пространство имен (namespace).
А по поводу хэдерных файлов, попробуй #pragma once, как я понял (может и не правильно) эта директива решает твою проблему.