2011-03-30 6 views
5

क्या मैक क्लास googlemock में किसी अन्य नकली कक्षा से प्राप्त कर सकता है? यदि हां, तो कृपया यह समझने में मेरी सहायता करें कि यह क्यों काम नहीं कर रहा है।क्या मैक क्लास googlemock में किसी अन्य नकली कक्षा से प्राप्त कर सकता है?

class IA 
{ 
public: 
    virtual int test1(int a) = 0; 
}; 

class IB : public IA 
{ 
public: 
    virtual float test2(float b) = 0; 
}; 

class MockA : public IA 
{ 
public: 
    MOCK_METHOD1(test1, int (int a)); 
}; 

class MockB : public MockA, public IB 
{ 
public: 
    MOCK_METHOD1(test2, float (float b)); 
}; 

मैं MockB के लिए एक cannot instantiate abstract class संकलक त्रुटि मिलती है लेकिन के लिए MockA

उत्तर

5

यदि आप एकाधिक विरासत का उपयोग करने की योजना बना रहे हैं, तो आपको आभासी विरासत का उपयोग करना चाहिए।

अगला उदाहरण संकलित करता है तथा लिंक ठीक:

class IA 
{ 
    public: 
     virtual int test1(int a) = 0; 
}; 

class IB : virtual public IA 
{ 
    public: 
     virtual float test2(float b) = 0; 
}; 

class MockA :virtual public IA 
{ 
    public: 
     int test1(int a) 
     { 
      return a+1; 
     } 
}; 

class MockB : public MockA, public IB 
{ 
    public: 
     float test2(float b) 
     { 
      return b+0.1; 
     } 
}; 

int main() 
{ 
    MockB b; 
    (void)b; 
} 

यह सिर्फ अपने उदाहरण का एक छोटा सा संशोधन है

2

क्लास नहीं IB से MockB inherits जो दो विशुद्ध रूप से अमूर्त कार्य हैं: test1 और test2। और आपको दोनों को ओवरराइड करने की आवश्यकता है। MockA से ओवरराइटिंग जो test1 ओवरराइड अपर्याप्त है (संभवतः सी ++ में - जावा में यह काम करेगा)। तो फिक्स

से MockB परिभाषा को जोड़ना है।

संबंधित मुद्दे