के साथ वर्चुअल विधि को ओवरराइड करते समय चेतावनी कैसे दी जाए, वर्चुअल विधि को ओवरराइड करते समय, मैंने देखा कि जब मैं दृश्यता (सार्वजनिक विधि के रूप में ओवरराइड की गई सुरक्षित विधि) में गलती करता हूं, तो मुझे संकलक द्वारा चेतावनी नहीं दी जाती है ।गलत दृश्यता
यह वैध सी ++ है, लेकिन आमतौर पर यह एक गलती है।
उदाहरण के लिए:
#include <iostream>
class Base
{
protected:
virtual void ProtectedMethod(void)
{
std::cout << "Base::ProtectedMethod" << std::endl;
}
};
class Derived : public Base
{
public:
virtual void ProtectedMethod(void)
{
std::cout << "Derived::ProtectedMethod" << std::endl;
}
};
int main(int, char* [])
{
Derived d;
d.ProtectedMethod();
}
मैं जीसीसी और बजना साथ संकलन की कोशिश की, -Wall -Wextra साथ, कोई भाग्य के साथ। मैं इस कोड पर सीपीपी चेक चला गया, अभी भी कोई भाग्य नहीं है।
कौन सा टूल मुझे इसका पता लगाने में मदद कर सकता है? मुझे उस लाइब्रेरी के पूरे स्रोत को ठीक करने की आवश्यकता है जिस पर मैं काम कर रहा हूं।
ठीक नहीं:
यहाँ ctags उत्पादन से जानकारी निकालने के लिए एक पार्टी का टुकड़ा है। जैसा कि सवाल में बताया गया है, मैं स्वीकार करता हूं कि यह पूरी तरह वैध सी ++ है। आम तौर पर, यह वही नहीं है जो मैं चाहता हूं, क्योंकि मैं कुछ ऐसा उजागर कर रहा हूं जिसे प्रकट नहीं किया जाना चाहिए। – Julien
हाँ, यह कोई गलती नहीं है। यह केवल कुछ भाषा है जो आपको लिखने की अनुमति देती है, भले ही यह लेखक का इरादा न हो। यह उन अनुमानों में से एक होगा "मुझे बताओ अगर मेरा मतलब कुछ और है" चेतावनियां, मुझे लगता है। कौन जानता है, हो सकता है कि ऐसी परिस्थितियां हों जहां आप किसी ऐसे व्यक्ति के लिए एक फ़ंक्शन पहुंच योग्य चाहते हैं जो व्युत्पन्न प्रकार को जानता हो, लेकिन किसी भी व्यक्ति को न केवल बेस प्रकार को जानता हो। –
यह एक उत्कृष्ट सवाल है। –