Archived

This forum has been archived. Please start a new discussion on GitHub.

Interface inheritance problem in VS 2005 EE

I have an ice file like that:
module gaga
{
  interface ThingOne
  {
    string  ID();
  };
  

  interface ThingTwo
  {
    string  Name();
  };
};

I get a compile error stating that ThingTwoI is an abstract class if I do this:
class ThingOneI : public gaga::ThingOne
{
  public:
    virtual ::std::string ID(const ::Ice::Current& iceCurrent = ::Ice::Current());
};

class ThingTwoI : public virtual gaga::ThingTwo, public virtual ThingOneI
{
  public:
    virtual ::std::string Name(const ::Ice::Current& iceCurrent = ::Ice::Current());
};

If I add the following public member function to ThingTwoI, all works fine.
virtual ::std::string ID(const ::Ice::Current& iceCurrent = ::Ice::Current())
{
  return ThingOneI::ID(iceCurrent);
}

What am I doing wrong?

Comments

  • sorry, there was a typo in my code above, the ice file contains:
    module gaga
    {
      interface ThingOne
      {
        string  ID();
      };
      
    
      interface ThingTwo extends ThingOne
      {
        string  Name();
      };
    };
    
  • benoit
    benoit Rennes, France
    Hi Peter,

    Try changing the following:
    class ThingOneI : public gaga::ThingOne
    

    With:
    class ThingOneI : virtual public gaga::ThingOne
    

    If you don't specify virtual inheritance, you end up with 2 instances of gaga::ThingOne and as you discovered it doesn't work :).

    Cheers,
    Benoit.
  • Bingo! Thanks heaps for that Benoit.