मेरे कोड में कुछ दावों ने अभी अजीब अभिनय करना शुरू कर दिया, और मैं सोच रहा था कि किसी के पास पहले जैसी ही स्थिति थी। की तरह एक छोटी कोड स्निपेट:अजीब जोर तार्किक और बूल चर पर
#include <cassert>
class A{
protected:
bool isM, isN;
public:
void someFunction();
};
A::someFunction(){
assert (this->isM && this->isN);
...
}
एक assertion failed
परिणाम पैदा करता है। दूसरी तरफ, कोड को थोड़ा सा बदलने के बाद:
A::someFunction(){
assert(this->isM);
assert(this->isN);
...
}
दावा किसी भी समस्या के साथ गुजरता है और कार्य सामान्य रूप से समाप्त होता है। फ़ंक्शन परिष्करण सामान्य रूप से अपेक्षित कार्यक्षमता है, क्योंकि bool
चर someFunction()
पर वास्तविक कॉल से पहले सेट किए गए हैं।
एक अतिरिक्त प्रश्न के रूप में, क्या सी ++ में दावा करने का एक बेहतर तरीका है? मैं सी पर बड़ा हुआ हूं, और अभी भी सी-शैली के दावे का उपयोग कर रहा हूं। मैंने अभी इस पर Google की सतह खरोंच की है, लेकिन कुछ भी नया संकेत देने के लिए कुछ भी नहीं मिला है।
ओह, और यदि आवश्यक हो, तो मैं कक्षा और चर के लिए अधिक संदर्भ प्रदान कर सकता हूं यदि किसी के लिए समस्याग्रस्त स्थिति को पहचानने के लिए पर्याप्त नहीं है। bool
चर वास्तव में उप-वर्ग के उदाहरण में सेट किए जाते हैं, जबकि someFunction
class A
इंटरफ़ेस में कार्यान्वित दुर्लभ कार्यक्षमताओं में से एक है, लेकिन चूंकि यह प्रश्न जटिल करता है, इसलिए यदि समुदाय इसे प्रासंगिक मानता है तो मैं इसे और अधिक विस्तार से संपादित कर दूंगा।
क्या आपका मतलब है कि 'बूल' चर 'कॉल' से पहले कुछ फ़ंक्शन() 'पर सेट किए गए हैं? – juanchopanza
क्या बूल सेट हैं या नहीं? – dexametason
सी ++ 11 'static_assert' लाता है, जो एक संकलन समय दावा है। मुझे लगता है कि यह पिछले सी ++ संस्करणों के लिए भी बढ़ावा पर उपलब्ध है। – RedX