2013-03-05 11 views
6

मैं निम्नलिखित कोड है:क्यों मैं अपना सरणी (सी ++) नहीं बना सकता?

#pragma once 

class Matrix{ 
public: 
    Matrix(); 
    ~Matrix(); 

protected: 
    float mat[3] = {0.0, 0.0, 0.0}; 
}; 

लेकिन मैं float mat[3] = {0.0, 0.0, 0.0}; पर एक त्रुटि हो रही है। यह त्रुटि C2059: वाक्यविन्यास त्रुटि: '{' और त्रुटि C2334: '{' से पहले अप्रत्याशित टोकन (ओं); स्पष्ट समारोह शरीर छोड़ना।

मैं सरणी को सही तरीके से तैयार कर रहा हूं I? तब समस्या क्या है?

+3

यह सी ++ 11 में काम करता है। – chris

+0

@chris वास्तव में? भले ही यह स्थिर कॉन्स अभिन्न नहीं है? – David

+0

@ डेव, यूप, कक्षा के सदस्य प्रारंभिक रूप से देखें। यहां कुछ [सबूत] हैं (http://liveworkspace.org/code/uww1n%240)। – chris

उत्तर

11

सी ++ 03 सदस्य फ़ील्ड के इनलाइन प्रारंभिकरण का समर्थन नहीं करता है। आप निर्माता में उदाहरण के लिए इस आरंभीकरण स्थानांतरित करने के लिए, की जरूरत है (link to a demo):

class Matrix{ 
public: 
    Matrix() : mat({0.0, 0.0, 0.0}) {}; 
    ~Matrix(); 

protected: 
    float mat[3]; 
}; 

ऊपर निर्माता इनलाइन परिभाषित करता है; यदि आप कन्स्ट्रक्टर को अलग से परिभाषित करते हैं, तो प्रारंभिक सूची (यानी कॉलन : और उद्घाटन ब्रेस {) के बीच कोड को कन्स्ट्रक्टर परिभाषा के साथ ले जाएं।

+3

मैंने आपको यह कहने के लिए लगभग नीचे गिरा दिया कि सी ++ इसका समर्थन नहीं करता है :) लेकिन ऐसा लगता है जैसे आप टाइपिंग शुरू करते ही पोस्ट करना चाहते हैं और फिर संपादन जारी रखें :) –

+1

@VladLazarenko आप सही हैं, मैं आमतौर पर जैसे ही पोस्ट करता हूं जवाब कम से कम मामूली रूप से सहायक हो जाता है। अक्सर, सही रास्ते पर ओपी प्राप्त करने के लिए पर्याप्त से अधिक है। संपादन लॉक-अप से पहले शेष पांच मिनट में, मैं संभावित पाठकों के लिए अधिक टेक्स्ट जोड़ता हूं जो Google के माध्यम से इस पोस्ट को पा सकते हैं। – dasblinkenlight

+0

@VladLazarenko एक खोज इंजन युद्ध या कुछ भी शुरू नहीं करना है, लेकिन "मैं अपनी सरणी क्यों नहीं बना सकता" इस लेखन के रूप में Google की खोज के शीर्ष पर है, जबकि डकडकगो को अभी तक यह नहीं मिला है :(मुझे लगता है कि "आकार मामलों" कहने का एक वैकल्पिक तरीका। – dasblinkenlight

7

सी ++ non-static data member initializers का समर्थन नहीं करता जब तक कि C++ 11 मानक की पुष्टि नहीं हुई थी। इस सुविधा का उपयोग करने के लिए, आपके पास एक कंपाइलर होना चाहिए जो सी ++ 11 का समर्थन करता हो। साथ ही, इसे डिफ़ॉल्ट रूप से अक्सर अक्षम किया जाता है, इसलिए आपको शायद इसे मैन्युअल रूप से सक्षम करने की आवश्यकता होगी। जीसीसी के लिए, std=c++11 निर्दिष्ट करें। क्लैंग के लिए, -std=c++11 -stdlib=libc++ करें। यदि आप कुछ और उपयोग करते हैं, तो दस्तावेज़ों की जांच करें।

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