2014-10-15 6 views
6

मैं C++ का उपयोग करने का अनुभवहीन हूँ और बिंदु जहां संकलक द्विआधारी अभिव्यक्ति को अमान्य operands उत्पन्न करता है पर अटक"बाइनरी अभिव्यक्ति के लिए अमान्य ऑपरेशन" त्रुटि को कैसे ठीक करें?

class Animal{ 
public: 
    int weight; 
}; 

int main(){ 
    Animal x, y; 
    x.weight = 33; 
    y.weight = 3; 

    if(x != y) { 
    // do something 
    } 
} 

मैं एक्स का उपयोग करें और y के साथ तुलना, संशोधित कोड यानी (x.weight बिना करना चाहते हैं! = y.weight) मुख्य कोड में। बाहरी कक्षा या परिभाषा से मुझे इस समस्या से कैसे संपर्क करना चाहिए?

+4

परिभाषित 'bool ऑपरेटर = (पशु स्थिरांक और a1,! पशु const और ए 2) {a1.weight! = A2.weight; } ' – user657267

+4

अधिभार ऑपरेटर'! = 'अपने स्वयं के कार्यान्वयन के साथ .. –

+0

मुख्य में कोड() को छोड़ा जाना चाहिए –

उत्तर

3

वैकल्पिक रूप से आप गैर-सदस्य के रूप में ऑपरेटर अधिभार जोड़ सकते हैं:

#include <iostream> 
using namespace std; 

class Animal{ 
public: 
    int weight; 
}; 

static bool operator!=(const Animal& a1, const Animal& a2) { 
    return a1.weight != a2.weight; 
} 

int main(){ 
    Animal x, y; 
    x.weight = 33; 
    y.weight = 3; 

    if(x != y) { 
     cout << "Not equal weight" << endl; 
    } 
    else { 
     cout << "Equal weight" << endl; 
    } 
} 
4

के रूप में टिप्पणी आप != ऑपरेटर को ओवरलोड की जरूरत में सुझाव दिया है, उदाहरण के

class Animal{ 
public: 
    int weight; 

    bool operator!=(const Animal &other) 
    { 
     return weight != other.weight; 
    } 
}; 

कोई व्यंजक x != y इस ऑपरेटर के लिए एक समारोह कॉल की तरह है, तो वास्तव में यह x.operator!=(y) के समान है।

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