I am using gcc 3.4.6 under CentOS 4.8 (RHEL 4.8): Reading specs from /usr/lib/gcc/i386-redhat-linux/3.4.6/specs Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --enable-shared --enable-threads=posix --disable-checking --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-java-awt=gtk --host=i386-redhat-linux Thread model: posix gcc version 3.4.6 20060404 (Red Hat 3.4.6-11)
And I am getting errors like this: ./../../C++/ParserClassesBoost/TrackGraph.cc: In function `Parsers::TrackGraph::Transform2D* operator*(const Parsers::TrackGraph::Transform2D&, const Parsers::TrackGraph::Transform2D&)': ./../../C++/ParserClassesBoost/TrackGraph.h:747: error: `float Parsers::TrackGraph::Transform2D::matrix[3][3]' is private ./../../C++/ParserClassesBoost/TrackGraph.cc:675: error: within this context ./../../C++/ParserClassesBoost/TrackGraph.h:747: error: `float Parsers::TrackGraph::Transform2D::matrix[3][3]' is private ./../../C++/ParserClassesBoost/TrackGraph.cc:675: error: within this context ./../../C++/ParserClassesBoost/TrackGraph.h:747: error: `float Parsers::TrackGraph::Transform2D::matrix[3][3]' is private ./../../C++/ParserClassesBoost/TrackGraph.cc:676: error: within this context make[1]: *** [libMRRParserClassesBoost_la-TrackGraph.lo] Error 1 make[1]: Leaving directory `/home/heller/Deepwoods/ModelRRSystem/Linux/C++/ParserClassesBoost' make: *** [all] Error 2 Here is the relevant fragment of TrackGraph.cc: using namespace Parsers; TrackGraph::Transform2D* operator * (const TrackGraph::Transform2D& t1, const TrackGraph::Transform2D& t2) { TrackGraph::Transform2D *new_t = new TrackGraph::Transform2D; for(int i=0; i < 3; i++) for(int j=0; j < 3; j++) { float sum = 0.0; for(int k=0; k < 3; k++) sum += t1.matrix[j][k] * t2.matrix[k][i]; new_t->matrix[j][i] = sum; } return new_t; } And of TrackGraph.h: namespace Parsers { class TrackGraph { public: class Transform2D { private: /** Transform matrix. */ float matrix[3][3]; /** Fuzz factor. */ const static float FUZZ = .00001; public: /** Matrix multiplication. */ friend Transform2D* operator * (const Transform2D& t1,const Transform2D& t2); }; }; }; I don't understand these error messages. They didn't happen before I added the namespace code. I would *like* to embed my code in a namespace and not put random stuff into the global namespace, but either gcc 3.4.6 does not handle namespaces well when dealing with friend operators or I am doing something wrong, but I don't know what that could be. For various reasons I don't want to install a newer version of gcc (I want to stay binary compatible with the rest of my system). -- Robert Heller -- 978-544-6933 Deepwoods Software -- Download the Model Railroad System http://www.deepsoft.com/ -- Binaries for Linux and MS-Windows hel...@deepsoft.com -- http://www.deepsoft.com/ModelRailroadSystem/ _______________________________________________ help-gplusplus mailing list help-gplusplus@gnu.org http://lists.gnu.org/mailman/listinfo/help-gplusplus