lundi 5 juin 2017

Friendship and Interfaces

I'm having a compilation error using Apple's Clang 7.0 with the following friendship code, using C++11 standard. I wonder what's really wrong with it since it seems to be valid for me. I'm describing the setting and the error I'm having:

MyInterface

namespace namespace1
{

class MyInterface
{
friend class MyClass;
public:
    virtual void some_method(void) = 0;
    ...
private:
    type some_attribute;   
    ...
}

}

MyClass::MyMethod Implementation

namespace namespace2
{

void MyClass::MyMethod(MyInterface* MyConcrete)
{
    ...
    // MyConcrete implements MyInterface
    if(MyConcrete->some_attribute == some_value) // Error*
    {
       ...
    }
    ...
}

}

Error

error: 'some_attribute' is a private member of 'namespace1::MyInterface'

I really expected that MyClass would have access to some_attribute in MyConcrete (which implemented MyInterface) regardless of the class access modifier. Any clues why this error is happening? Any suggestions?

Thank you!

Aucun commentaire:

Enregistrer un commentaire