2012-01-11 18 views
5

निम्नलिखित प्रोग्राम मेरे लिए बहुत ठीक दिखता है। लेकिन मैं इसे संकलित नहीं कर सकता।संरचनाओं के वेक्टर

#include <iostream> 
#include <vector> 
using namespace std; 

int main() 
{ 
    struct a 
    { 
     int i; 
     int j; 
    }; 


    std::vector<a*> vecA; 

    a* pA = new a; 

    pA->i = 4; 
    pA->j = 9; 

    vecA.push_back(pA); 

    return 0; 
} 

यह निम्न त्रुटि उत्पन्न करता है।

struct_update.cc: In function ‘int main()’: 
struct_update.cc:32:19: error: template argument for ‘template<class _Alloc> class std::allocator’ uses local type ‘main()::a*’ 
struct_update.cc:32:19: error: trying to instantiate ‘template<class _Alloc> class std::allocator’ 
struct_update.cc:32:19: error: template argument 2 is invalid 
struct_update.cc:32:25: error: invalid type in declaration before ‘;’ token 
struct_update.cc:39:10: error: request for member ‘push_back’ in ‘vecA’, which is of non-class type ‘int’ 
+0

मेरे लिए ठीक संकलित ... (विजुअल स्टूडियो 2010 SP1) – Mysticial

+0

@honk कोड से ऊपर जी ++ (आज तक ubuntu 11.10 के लिए नवीनतम संस्करण उपलब्ध है) के साथ काम नहीं करता है – Dilawar

उत्तर

12

यह अनुमति देने से इंकार कर देता है, यह अब नए सी ++ 11 मानक में सत्य नहीं है, लेकिन वर्तमान कंपाइलर्स अभी तक इसे पूरी तरह कार्यान्वित नहीं करते हैं।

एक स्थानीय प्रकार टेम्पलेट पैरामीटर नहीं हो सकता है। main से ऊपर अपनी संरचना परिभाषा को ले जाएं, और सब कुछ काम करेगा।

या सी ++ 11 के इस भाग का समर्थन करने वाले व्यक्ति को अपने कंपाइलर को अपडेट करें।

यहाँ सी ++ 03 खंड 14.3.1 से प्रतिबंध ([temp.arg.type]), जिसमें निकाल दिया जाता है है सी ++ 11:

एक स्थानीय प्रकार, कोई संबंध के साथ एक प्रकार, एक अनाम प्रकार या एक इन प्रकारों में से किसी भी प्रकार से मिश्रित टाइप का उपयोग टेम्पलेट-तर्क टेम्पलेट टाइप-पैरामीटर के लिए नहीं किया जाएगा।

6

मुख्य कार्य के बाहर संरचना परिभाषा को ले जाएं।

struct a 
    { 
     int i; 
     int j; 
    }; 

int main() 
{ 

    std::vector<a*> vecA; 

    a* pA = new a; 

    pA->i = 4; 
    pA->j = 9; 

    vecA.push_back(pA); 

C++ में 03 तो आप इस

एक स्थानीय प्रकार, कोई संबंध के साथ एक प्रकार, एक अनाम प्रकार या एक प्रकार इन प्रकार से किसी से जटिल नहीं कर सकते एक के रूप में इस्तेमाल नहीं किया जाएगा टेम्पलेट प्रकार-पैरामीटर के लिए टेम्पलेट-तर्क।

सी ++ में मुझे लगता है कि आप मानक के अनुसार कर सकते हैं। भले ही मेरा विजुअल स्टूडियो 11 कंपाइलर

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