2017-08-01 5 views
5

मुझे समस्या दिखाने के लिए कुछ बहुत ही सरल सी ++ कोड मिला है। मैं अपने सरणी को ctor में मानों के साथ शुरू करता हूं। लेकिन जब मैं मुख्य रूप से सरणी तक पहुंचने का प्रयास करता हूं, तो उन मानों को यादृच्छिक संख्याओं से बदल दिया जाता है। क्यूं कर?ऐरे प्रारंभिक मानों को धारण नहीं कर रहा है

//Example to figure out why initialization values are disappearing 
#include <iostream> 

struct Struct1 
{ 
    float array1[2]; 

    //ctor 
    Struct1(); 
}; 

Struct1::Struct1() 
{ 
    float array1[] = {0.2,1.3}; 
} 

int main() 
{ 
    Struct1 StructEx; 

    std::cout<<StructEx.array1[0]<<' '; 
    std::cout<<StructEx.array1[1]<<std::endl; 

    return 0; 
} 
+4

'फ्लोट सरणी 1 [] = {0.2,1.3}; 'कन्स्ट्रक्टर में एक नया * स्थानीय * चर' array1' बनाता है। – crashmstr

+0

सदस्य परिवर्तक को संदर्भित करने के लिए ctor में 'float' को हटाएं - और जब आप कर सकते हैं तो ctor body पर प्रारंभिक सूची का उपयोग करना पसंद करते हैं। –

+1

यह 4 अपवॉट कैसे प्राप्त हुआ? : ओ ओपी को कोई अपराध नहीं, लेकिन यह कुछ हद तक बुनियादी है। – HolyBlackCat

उत्तर

6

जैसा कि @ क्रैशमस्ट्र ने उल्लेख किया है, आप संरचना के सदस्य को प्रारंभ नहीं करते हैं, बल्कि स्थानीय चर। निम्नलिखित कोड काम करना चाहिए:

struct Struct1 
{ 
    float array1[2]; 
    //ctor 
    Struct1(); 
}; 

Struct1::Struct1() 
: array1 ({0.2,1.3}) 
{ 
} 

int main() 
{ 
    Struct1 StructEx; 

    std::cout<<StructEx.array1[0]<<' '; 
    std::cout<<StructEx.array1[1]<<std::endl; 

    return 0; 
} 
+1

इस मामले में, मैं कहता हूं, जगह में आरंभ करें। इसके लिए एक कन्स्ट्रक्टर प्रदान करने की कोई आवश्यकता नहीं है। – SergeyA

+0

क्या मैं यह कहने में सही हूं कि सीटीओआर में "फ्लोट" का स्थानीय उपयोग इसे स्थानीय चर बनाता है? – MrMoe

+0

@MrMoe - हाँ, यह सही है। –

1

चेतावनी पर स्विच (-Wall) जब संकलन, और आप

  • float array1[]={0.2,1.3}; अप्रयुक्त है
  • StructEx.array1[0] और StructEx.array1[0] अप्रारंभीकृत हैं देखेंगे

कन्स्ट्रक्टर में यह

डालें
array1[0]=0.2; 
array1[1]=1.3; 
+0

क्रिसब का जवाब भी सही है (और शायद इस मामले में अच्छा है)। – Elyasin

+0

यह बहुत उपयोगी लगता है। धन्यवाद – MrMoe

+0

यदि आप अभी तक नहीं पूछा गया है तो आप इसे एक नए प्रश्न के रूप में पूछ सकते हैं। जवाब अनुमान लगाने से कहीं ज्यादा बेहतर होने की संभावना है। मैं दुर्भाग्य से फ़ाइलों को बनाने के बारे में बहुत परिचित नहीं हूँ। – Elyasin

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