thewalt@RITZ.CIVE.CMU.EDU (Chris Thewalt) (09/14/89)
I attempted to post this last week and it never appeared, so here it is again. I have 2 apparent bugs, one involving const definition and the other allowing access of a private member without error. BUG 1: ############################################################################# Const declarations are allowed in header files, but when I include the header file shown below, actual definition takes place for variable "a" in each .cc file, resulting in "_a is multiply defined" errors at link time. Details: Microvax II running Ultrix 2.2 g++ version 1.35.0 foo.h: ------ const int a = 1; foo1.cc: -------- #include "foo.h" int x = a; foo2.cc: -------- #include "foo.h" int y = a; BUG 2 ############################################################################# In the function shown below, a private member of Class2 (c2.flag) is accessed without error even though the function is not a friend of Class2. Details: Microvax II running Ultrix 2.2 g++ version 1.35.0 Compile log(lines folded by me): g++ version 1.35.0 /usr/misc/.gnu/lib/compilers/gcc-cpp -+ -v -undef -D__GNU__ -D__GNUG__ \ -D__cplusplus -Dvax -Dunix -D__vax__ -D__unix__ foo.cc /tmp/cc001531.cpp GNU CPP version 1.35 /usr/misc/.gnu/lib/compilers/gcc-cc1plus /tmp/cc001531.cpp -quiet -dumpbase \ foo.cc -noreg -version -o /tmp/cc001531.s GNU C++ version 1.35.0 (vax) compiled by GNU C version 1.35. as /tmp/cc001531.s -o foo.o ---------------------------------------------------------------------------- foo.cc: ------- #include "foo.h" Class1& operator*(Class1& c1, Class2& c2) { if(c1.flag != c2.flag) // c2.flag should not be accessible ; } ---------------------------------------------------------------------------- foo.h: ------ // #include <stream.h> class Class2 { int flag; public: Class2(); ~Class2(); friend Class2& operator*(double, Class2&); friend Class2& operator*(Class2&, double ); }; class Class1 { int flag; public: Class1(); ~Class1(); friend Class1& operator*(Class1&, Class2&); }; ---- Chris thewalt@ce.cmu.edu =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= Christopher Robin Thewalt These opinions are not necessarily thewalt@ce.cmu.edu shared by my employer... Carnegie Mellon University