Hi All !
есть такой код:
class B
{
public:
void method1()
{
F f;
f.m = 0;
}
};
class D : public B
{
public:
void method1()
{
F f;
f.m = 1;
}
};
class F
{
friend class B;
protected:
int m;
};
и получаю
error C2248: 'F::m' : cannot access private member declared in class 'F'
на строке f.m = 1;
class F
{
friend class D;
...
не катит (во время разработки B и F о D поидее ничего не извесно)
class F
{
public: int m;
...
крайне нежелательно
class F
{
public: F::SetM(int)
...
не катит (лучше уже использовать 2)
Как еще можно это сделать ?
Может есть способ разрешить доступ производному классу декларативно ?
С уважением .Alex
Здравствуйте, .A.Fas, Вы писали:
class B
{
public:
void method1()
{
F f;
alter_f(f, 0);
}
protected:
void alter_f(F& f, int val)
{
f.m = val;
}
};
class D : public B
{
public:
void method1()
{
F f;
alter_f(f, 1);
}
};
// class F is left unchanged...
AF>Может есть способ разрешить доступ производному классу декларативно ?
Нет такого способа. Дружба всегда бывает только с кем-то конкретно.
Дружба не распорстраняется на потомков. В вашем случае, можно было написать следующий код:
class B
{
public:
void method1()
{
F f;
setM(f, 0);
}
protected:
void setM(F& f, int m) { f.m = m; }
};
class D : public B
{
public:
void method1()
{
F f;
setM(f, 1);
}
};
=====
Кирилл