c++ - error C2512: 'LayerTwoTree' : no appropriate default constructor available -


मेरे पास दो हेडर फाइल है जैसे:

  #ifndef LAYER_ONE_TREE_H #define LAYER_ONE_TREE_H #include "Utils.h" # शामिल "LayerTwoTree.h" वर्ग LayerOneTreeNode {सार्वजनिक: मित्र वर्ग LayerOneTree; मित्र वर्ग LayerTwoTree; । । । LayerTwoTree * S_U1; // एक परत की जड़ में एक संकेतक दो तृती परत LayerOneTreeNode () {S_U1 = नई LayerTwoTree; // यहां त्रुटि है त्रुटि 1 एर्रो C2512: 'LayerTwoTree': कोई उपयुक्त डिफ़ॉल्ट कन्स्ट्रक्टर उपलब्ध नहीं S_U1- & gt; init (); }}; क्लास लेयरऑनट्री {सार्वजनिक: लेयरऑनट्री () {} । । निजी:। । । }; #endif  

और दूसरे हेडर:

  #ifndef LAYER_TWO_TREE_H #define LAYER_TWO_TREE_H #include "Utills.h" # शामिल "LayerOneTree.h" वर्ग LayerTwoTreeNode {सार्वजनिक: मित्र वर्ग LayerTwoTree; मित्र वर्ग LayerOneTree; । । । // कंस्ट्रक्टर LayerTwoTreeNode (प्वाइंट v = बिंदु (), LayerTwoTreeNode * l = nullptr, LayerTwoTreeNode * r = nullptr, नोडकॉलर सी = काला): कुंजी (वी), रंग (सी), बायां (एल), दाएं (आर) { }}; क्लास लेयरटीवट्री {सार्वजनिक: फ्रेंड क्लास लेयरऑनट्री; मित्र वर्ग LayerOneTreeNode; । । । LayerTwoTree () {} LayerOneTreeNode * FatherNode; // इस पेड़ के पिता नोड}; #endif  

मुझे पता नहीं क्यों im "कोई उपयुक्त डिफ़ॉल्ट कन्स्ट्रक्टर उपलब्ध नहीं है" जब मैं LayerTwoTree मेरे LayerOneTree में कोशिश कर रहा हूँ >। मुझे लगता है कि समस्या यह है क्योंकि मुझे LayerTwoTree में LayerOneTree और LayerOneTree मेरे LayerTwoTree में रखना चाहते हैं। क्या इस समस्या को दूर करने के लिए कोई उपाय है? कृपया टिप्पणी के बारे में आपको अधिक विवरण जानने की जरूरत है।

विश्लेषण:

मान लें कि कुछ फाइलें शामिल हैं LayerTwoTree.h, प्रासंगिक पंक्तियां हैं:

  #ifndef LAYER_TWO_TREE_H #define LAYER_TWO_TREE_H #include "LayerOneTree.h"  

इस पर बिंदु, LayerOneTree.h की सामग्री अनुवाद इकाई में शामिल हैं:

  #ifndef LAYER_ONE_TREE_H #define LAYER_ONE_TREE_H #include "LayerTwoTree.h"  

पर इस बिंदु पर, LayerTwoTree.h की सामग्री अनुवाद यूनिट में फिर से शामिल की गई है:

  #ifndef LAYER_TWO_TREE_H #endif  

ध्यान दें कि बीच में सभी चीजें शामिल गार्ड को छोड़ दिया गया है, क्योंकि मैक्रो पहले ही परिभाषित किया गया था! तो, वापस LayerOneTree.h पर:

  वर्ग LayerOneTreeNode {सार्वजनिक: मित्र वर्ग LayerOneTree; मित्र वर्ग LayerTwoTree;  

इस बिंदु पर, दो पेड़ वर्ग घोषित हैं, लेकिन अधूरे हैं।

  LayerTwoTree * S_U1; // एक परत की जड़ में एक सूचक दोट्री < / कोड>  

अपूर्ण प्रकारों के लिए पॉइंटर्स बनाना ठीक है, इसलिए यह काम करता है ...

  LayerOneTreeNode () {S_U1 = नई LayerTwoTree; // यहां त्रुटि है त्रुटि 1 एर्रो C2512: 'LayerTwoTree': कोई उपयुक्त डिफ़ॉल्ट कन्स्ट्रक्टर उपलब्ध नहीं S_U1- & gt; init (); }  

... परन्तु इस बिंदु पर आप इस अपूर्ण कक्षा का एक उदाहरण बनाने की कोशिश कर रहे हैं, जिसके बारे में एमएससी थोड़ा भ्रामक त्रुटि संदेश के साथ शिकायत करता है।

समाधान :

इस स्कीमा का प्रयोग करें:

  // कक्षा वर्ग फू घोषित करें; कक्षा बार; // परिभाषित कक्षाएं कक्षा Foo {बार * p; सार्वजनिक: // घोषित ctor Foo (); }; क्लास बार {Foo * p; सार्वजनिक: // घोषणा ctor बार (); }; // define ctor Foo :: Foo () {p = नया बार (); } बार :: बार () {p = new Foo (); }  

वैकल्पिक रूप से, "परिपत्र निर्भरता C ++" की खोज करें और आपको अधिक स्पष्टीकरण मिलेगा।


Comments

Popular posts from this blog

apache - 504 Gateway Time-out The server didn't respond in time. How to fix it? -

c# - .net WebSocket: CloseOutputAsync vs CloseAsync -

c++ - How to properly scale qgroupbox title with stylesheet for high resolution display? -