access denied to a protected member of a virtual base class

turlais@mahler turlais@mahler
Thu Oct 9 05:48:00 GMT 1997


 I dont know if it is a bug. A protected method of a virtual base
class cannot be call in the derived base class if the base class is
not a direct parent. Not a blocking problem.

thanks

Pierre TURLAIS

verdi 53- /usr/tmp/test/bin/gcc -v vb.cc
Reading specs from /usr/tmp/test/lib/gcc-lib/sparc-sun-solaris2.5/egcs-2.90.12/s
pecs
gcc version egcs-2.90.12 971008 (gcc2-970802 experimental)
 /usr/tmp/test/lib/gcc-lib/sparc-sun-solaris2.5/egcs-2.90.12/cpp -lang-c++ -v -u
ndef -D__GNUC__=2 -D__GNUG__=2 -D__cplusplus -D__GNUC_MINOR__=90 -Dsun -Dsparc -
Dunix -D__svr4__ -D__SVR4 -D__GCC_NEW_VARARGS__ -D__sun__ -D__sparc__ -D__unix__
 -D__svr4__ -D__SVR4 -D__GCC_NEW_VARARGS__ -D__sun -D__sparc -D__unix -Asystem(u
nix) -Asystem(svr4) -Acpu(sparc) -Amachine(sparc) -D__EXCEPTIONS vb.cc /var/tmp/
cca0078i.ii
GNU CPP version egcs-2.90.12 971008 (gcc2-970802 experimental) (sparc)
#include "..." search starts here:
#include <...> search starts here:
 /usr/tmp/test/include/g++
 /usr/local/include
 /usr/tmp/test/sparc-sun-solaris2.5/include
 /usr/tmp/test/lib/gcc-lib/sparc-sun-solaris2.5/egcs-2.90.12/include
 /usr/include
End of search list.
 /usr/tmp/test/lib/gcc-lib/sparc-sun-solaris2.5/egcs-2.90.12/cc1plus /var/tmp/cc
a0078i.ii -quiet -dumpbase vb.cc -version -o /var/tmp/cca0078i.s
GNU C++ version egcs-2.90.12 971008 (gcc2-970802 experimental) (sparc-sun-solari
s2.5) compiled by GNU C version egcs-2.90.10 970924 (gcc2-970802 experimental).



vb.cc: In method `void dd1::f()':
vb.cc:4: `void base::f()' is protected
vb.cc:25: within this context
vb.cc: In method `void d1_and_base::f()':
vb.cc:4: `void base::f()' is protected
vb.cc:36: within this context


--------------------  vb.cc -------------

class base {
protected:
    virtual void f();
};

class d1 : public virtual base {
protected:
    void f();
};

void d1::f()
{
    base::f();
}

class dd1 : public virtual d1 {
protected:
     void f();
};

void dd1::f()
{
    d1::f();
    base::f();
}

class d1_and_base : public virtual d1, public virtual base {
protected:
     void f();
};

void d1_and_base::f()
{
    d1::f();
    base::f();
}



More information about the Gcc-bugs mailing list