La mia soluzione (ovviamente naif, ma sono anni che ho abbandonato il C++): devi scrivere, per la classe A e la classe B, due metodi pubblici, ad esempio:
class A
{
protected:
int x;
public:
int get_x(){
return x;
}
void set_x(int a){
x = a;
}
};
Il codice di C diventa:
class C : public B
{
protected:
B k[100];
public:
void f()
{
k[0].set_x(0);
k[0].set_y(0);
return;
}
};
Dovrebbe funzionare. Ovviamente, la keyword 'friend' avrebbe un po' semplificato il tutto.