В общем, если вы планируете объявить личную переменную, вам следует отступить и спросить себя, почему вы даже публикуете объявление в заголовочном файле?
вместо того, чтобы выставлять ваши переменные-члены для всего мира, чтобы увидеть в foo.h:
class foo {
private:
int please_dont_modify_me;
double pretend_you_dont_see_this_declaration;
char dont_look_at_this [128];
public:
....
};
просто используйте неполный закрытый тип, то есть не , определенный:
class foo {
struct foo_privates & mine; // incomplete type
public:
...
};
затем в foo.cpp ТОЛЬКО :
struct foo_privates {
int i;
double d;
char str[128];
};
Конечно, конструктор для foo должен выделить отдельный объект, а деструктор должен уничтожить его.