2012-08-22 24 views
6

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

error: a brace-enclosed initializer is not allowed here before '{' token

error: invalid in-class initialization of static data member of non-integral type 'const timespec'

मैं इसे कैसे प्रारंभ करते हैं: इस कोड

class Game { 
    public: 
     static const struct timespec UPDATE_TIMEOUT = { 10 , 10 }; 

    ... 
}; 

इस त्रुटि हो रही है कोशिश कर रहा है? धन्यवाद!

+3

ध्यान दें कि विस्तारित प्रकार विनिर्देशक ('struct timespec') सी ++ में बहुत अधिक आवश्यक नहीं हैं। बस 'timespec' लिखें। – GManNickG

उत्तर

15

कक्षा के बाहर एक अलग परिभाषा यह प्रारंभ, एक स्रोत फ़ाइल के अंदर:

// Header file 
class Game { 
    public: 
     // Declaration: 
     static const struct timespec UPDATE_TIMEOUT; 
    ... 
}; 

// Source file 
const struct timespec Game::UPDATE_TIMEOUT = { 10 , 10 }; // Definition 

आप एक हेडर फाइल में परिभाषा में शामिल हैं, तो आप की संभावना है कि शीर्ष लेख गुणा परिभाषित प्रतीकों के बारे में लिंकर त्रुटियों मिल जाएगा एक से अधिक स्रोत फ़ाइल में शामिल है।

+1

मैं सी ++ में सुंदर नोब हूं, मैंने सुना है, मुझे 'classname.h' फ़ाइल में _declare_ कक्षाएं और _define_ उन्हें 'classname.c' फ़ाइल में _define_ करना चाहिए। और इसलिए मैं जितनी बार चाहूं उतनी बार अपने कार्यक्रमों में '.h' फ़ाइल शामिल कर पाऊंगा, लेकिन मैं कब और कैसे' .c' फ़ाइल का उपयोग करूं? मैं एक जी ++ कंपाइलर का उपयोग कर रहा हूं ... – Kolyunya

+0

'.c' सी स्रोत फ़ाइलों के लिए है, इसे C++ के लिए उपयोग न करें। सी ++ स्रोत फ़ाइलों के लिए '.cc' या' .cpp' का उपयोग करें ('.cc' आमतौर पर लिनक्स पर पसंद किया जाता है, '.cpp' आमतौर पर विंडोज पर पसंद किया जाता है, लेकिन या तो करेगा)। आम तौर पर, एक * घोषणा * कहती है "यहां कुछ का नाम है, लेकिन यह सब मुझे इसके बारे में पता है" (उदाहरण के लिए कक्षा या कार्य का नाम)। ए * परिभाषा * कहती है "यहां कुछ का नाम है और यह क्या है", उदा। कक्षा के सदस्य, कार्य निकाय, चर मूल्य, आदि –

+0

हाँ, मुझे यह मिल गया, धन्यवाद! मैं अपनी कक्षा को '.h' फ़ाइल में घोषित करता हूं, फिर मैं इसे' .cpp' फ़ाइल में परिभाषित करता हूं। फिर मैं अपने कार्यक्रम में '.h' शामिल करता हूं। अब सवाल: मुझे अपनी '। ​​सीपीपी' फाइल के साथ क्या करना चाहिए? मैं इसे कैसे इस्तेमाल करूं? क्या मुझे इसे कहीं भी लिखना चाहिए 'g ++ main.cpp -o main'? मैं लिनक्स पर जी ++ का उपयोग कर रहा हूँ। – Kolyunya

0

चर के रूप में एक स्थिर चर के रूप में चर घोषित करें और उस फ़ंक्शन को चर के संदर्भ को वापस कर दें।