RE: [ROOT] operator >> in namespaces

From: Philippe Canal (pcanal@fnal.gov)
Date: Wed Jul 11 2001 - 15:59:43 MEST


Hi Axel,

You can do two things.

First you can compile the rootcint dictionary without the KCC option --strict.
(--strict inforces a pickier C++ standard compliance).

Second you can also hand declare the operator>> in your header within the
namespace.

namespace mynamespace{
  TBuffer &operator>>(TBuffer &buf, MyClass *&obj);
}

Currently the issue is that this operator is only declared as a friend
of MyClass within the ClassDef definition.  For ROOT 3.02.xx we hope to
upgrade the ClassDef mechanism to lift some of this annoyances.

Cheers,
Philippe

-----Original Message-----
From: owner-roottalk@pcroot.cern.ch
[mailto:owner-roottalk@pcroot.cern.ch]On Behalf Of Axel Naumann
Sent: Tuesday, July 10, 2001 6:38 PM
To: Roottalk@Pcroot. Cern. Ch
Subject: [ROOT] operator >> in namespaces


Hi,

I run into the following problem when trying to compile the dictionary for
this "namespaced" class:

---
namespace mynamespace{
class MyClass{
public:
MyClass(){};
~MyClass(){};
int i;

ClassDef(MyClass,1)
};
}
---

Building the dict with this linkdef.h

---
#ifndef _INCLUDE_LINKDEF
#define _INCLUDE_LINKDEF

#ifdef __CINT__

#pragma link off all globals;
#pragma link off all classes;
#pragma link off all functions;

#pragma link C++ nestedclass;
#pragma link C++ nestedtypedef;
#pragma link C++ namespace mynamespace;

#pragma link C++ class mynamespace::MyClass+;
#endif
#endif
---

and compiling it with KCC 4.0d on IRIX 6.5 I get the following error:
"mydictfile.cpp", line 17: error #135: namespace "mynamespace"
          has no member "operator>>"
  TBuffer &mynamespace::operator>>(TBuffer &buf, mynamespace::MyClass *&obj)
                        ^

Too bad KCC is so picky, Win MSVC++ and GCC don't care about that. Any idea
what I could do (to get it compiled under KCC, that is)? Btw, does this
operator _have_ to be in the namespace?

Cheers, Axel.



This archive was generated by hypermail 2b29 : Tue Jan 01 2002 - 17:50:51 MET