2012-12-08 6 views
12

का उपयोग कर विधियों के साथ नेस्टेड structs मैं python nested defs को C++ में अनुवाद करना चाहता हूं, जो मैं नेस्टेड structs का उपयोग कर कर रहा हूं।टेम्पलेट्स

#include<iostream> 
static void ffunc(int x, int y) 
{ 
    static int x1 = x; 
    static int y1 = y; 
    struct g 
    { 
     static void gfunc(int z) 
     { 
      static int z1 = z; 
      std::cout << x1 << y1 << z << std::endl; 

      struct h 
      { 
       static void hfunc(int k) 
       { 
        std::cout<< x1 << y1 << z1 << k << std::endl; 
       } 
      }; 
      h::hfunc(4); 
     } 
    }; 
    g::gfunc(3); 
} 
int main() 
{ 
    ffunc(1, 2); 
} 

यह कोड ठीक काम करता है। समस्या यह है कि, मैं टेम्पलेट्स चाहता हूं, ताकि नेस्टेड फ़ंक्शंस किसी भी प्रकार के पैरामीटर का उपयोग कर सकें। हालांकि, जब मैं टेम्पलेट का उपयोग करने का प्रयास करें:

#include<iostream> 
template <typename t1> 
static void ffunc(t1 x, t1 y) 
{ 
    static t1 x1 = x; 
    static t1 y1 = y; 
    struct g 
    { 
     static void gfunc(int z) 
     { 
      static int z1 = z; 
      std::cout << x1 << y1 << z << std::endl; 

      struct h 
      { 
       static void hfunc(int k) 
       { 
        std::cout<< x1 << y1 << z1 << k << std::endl; 
       } 
      }; 
      h::hfunc(4); 
     } 
    }; 
    g::gfunc(3); 
} 
int main() 
{ 
    ffunc(1, 2); 
} 

मैं त्रुटि मिलती है:

/tmp/cceIMovo.o: In function `void ffunc<int>(int, int)::g::gfunc(int)': 
nested.cc:(.text+0x17d): undefined reference to `y1' 
nested.cc:(.text+0x183): undefined reference to `x1' 
/tmp/cceIMovo.o: In function `void ffunc<int>(int, int)::g::gfunc(int)::h::hfunc(int)': 
nested.cc:(.text+0x1e5): undefined reference to `z1' 
nested.cc:(.text+0x1ec): undefined reference to `y1' 
nested.cc:(.text+0x1f2): undefined reference to `x1' 

किसी को भी पता है कि अगर मैं क्या करना चाहते हैं ग में संभव है ++? धन्यवाद!

+0

सी ++ के बाद से है एक संकलित भाषा (और क्योंकि भाषा डिजाइन फैसले का), घोंसले structs (और विशेष रूप से उन structs में विधि) परिणाम है। मैं दृढ़ता से सुझाव देता हूं कि आप इस तरह से अपने कोड को डिजाइन करने के पेशेवरों और विपक्ष को समझने के लिए "इनलाइन फ़ंक्शंस" के बारे में जानें। –

+2

@ मेगाजौल्स: अक्सर एक स्टैक ओवरफ्लो प्रश्न को ईमानदार-से-भलाई कंपाइलर बग नहीं मिलता है। –

+0

@MooingDuck: जब तक हम वीसी ++ के बारे में बात नहीं कर रहे हैं। :- पी – ildjarn

उत्तर

2

मैं गलत हो सकता हूं, लेकिन यह एक कंपाइलर बग की तरह दिखता है। जीसीसी (4.7.2) उस त्रुटि का उत्पादन करता है, जबकि क्लैंग (3.1) और आईसीसी (13.0.0) इसके साथ ठीक है।

अन्य compilers पर इस पुन: पेश करने की कोशिश कर के लिए कम से कम कोड: http://pastebin.com/kf2sF3NL

+0

मैं जीसीसी 4.4.6 – MegaJoules

+0

@ मेगाजौल्स का उपयोग करने तक सीमित हूं इसलिए यह बग हालिया प्रतिगमन नहीं है। (यदि यह एक बग है।) मैंने इस बारे में जीसीसी मेलिंग सूची पर पोस्ट किया है। इस बीटीडब्ल्यू को पुन: उत्पन्न करने वाला न्यूनतम कोड है: http://pastebin.com/kf2sF3NL –

+0

@NikosC: बग रिपोर्ट से लिंक? –

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

  • कोई संबंधित समस्या नहीं^_^