Ok, I wrote it differently:

c0 has my_link, which c1 needs to be able to modify, within it's
constructor.

Once again, why do_other is able to modify obj.my_link
but c1 constructor is not. The rationale behind standard?
I do understand that c0 is a implicit friend of c0, and c1 is
not implicit friend of c0.
But I don't get the benefit of this arrangement. Both situations
should be the same.


PS. I guess there isn't any way to revoke implicit friendness from a class
to itself, or is there?


(This has nothing to do with virtual functions)

Topi



#include <stdio.h>

class c0;
class c1;

class c0
{
  c0 *my_link;
protected:
  void add_link(c0 &obj)
  {
    my_link=&obj;
  }
  void do_other(c0 &obj)
  {
    add_link(obj);
    obj.add_link(*this);  // This is ok, as c0 is a firend of c0.
  }
};

class c1: public c0
{
  int x;
public:
  c1(c0 &obj,int xx)
  {
    x=xx;
    if(x==0)
      {
        add_link(obj);
        obj.add_link(*this);  // This doesn't compile, as c1 is not a friend of 
c0.
      }
    else
      {
        add_link(*this);
        obj.add_link(obj);  // This doesn't compile either.
      }
  }
};

class c2: public c0
{
  int x;
};

int main(void)
{
  c2 v2;
  c1 v1(v2,2);
}


Reply via email to