Здравствуйте, andsin, Вы писали:
A>Привет!
A>Вопрос, быть может, дурацкий, но как избежать многократного вызова констуктора глобально объекта. В файле cont.h объявлено:
A>A>typedef class _CONTAINER{
A>} CCONTAINER;
A>// ниже
A>static CCONTAINER container;
A>
A>Я думал, что объявив глобальный объект с помощью static, я добьюсь того, что конструктор будет вызван единожды. Ан нет! Конструктор вызывается столько раз, сколько раз в программе встречается #include "cont.h". Как я должен описать объект, чтобы конструктор был вызван однажды?
A>З.Ы. @pragma once почему-то использовать не хочется.
A>Спасибо!
1. в хидере объявлять переменные нестоит, для этого воспользуйтесь extern;
2. Обязательно заключайте содержимое хидера в:
#ifndef ...
#define ...
#endif
3. Ну а собственно в .сср уже и объявляейте статический объект
Вот пример кода:
Abra.h Он и содержит требуемый объек
#ifndef _CLASSA_H_
#define _CALSSA_H_
...
typedef class CAbra
{
public:
CAbra(){
printf("Constructor\n");
}
virtual ~CAbra(){}
}ABRA;
#endif
Знаю что коряво объявлять так функции, но совсем не хотелось делать еще один срр
temp1.h Здесь объявляем внешний объект
#ifndef _TEMP1_H_
#define _TEMP1_H_
#include "abra.h"
extern ABRA abra_class;
#endif
temp1.срр Здесь описываем статический объект объявленный внешним
#include "temp1.h"
static CAbra abra_class;
Вооля...сколько раз не подключай...больше одного раза конструктор не вызоветься (как не проси

)