2010-02-02 4 views
10

मैं अपनी पहली सी क्लास में ++ एक प्रोग्रामिंग छात्र हूँ, और हाल ही में एक परियोजना मैंने किया था के लिए, मैं जैसे मैं सी # में कर सकता है तार की एक सरणी बनाने में असमर्थ रहा:क्या सी ++ प्रकार स्ट्रिंग के निरंतर सरणी का समर्थन करता है?

string MONTHS[ARRAY_CAPACITY] = { "Jan", "Feb", "Mar", "April", "May", "June", "July", "Aug", "Sep", "Oct", "Nov", "Dec" }; 
// this yields many compiler errors in C++ 

यह करने के लिए संभव है सी ++ में कुछ समान है?

धन्यवाद!

+0

ARRAY_CAPACITY क्या है? यह कैसे घोषित किया जाता है। क्या त्रुटियां (आमतौर पर कहने के लिए एक अच्छी बात है)? क्या आप वास्तव में सी-स्ट्रिंग (चार सरणी) की सरणी बनाम 'स्ट्रिंग' (ऑब्जेक्ट) की सरणी चाहते हैं? – Romain

+0

'#DEFINE ARRAY_CAPACITY 12' –

उत्तर

14

आप सी में सरणी आरंभ तो ++ तो यह एक आकार की आवश्यकता होती है नहीं स्थापित किया जाना (हालांकि यह एक स्वीकार करेंगे), तो:

std::string months[] = { "Jan", "Feb", "Mar", "April", "May", "June", "July", "Aug", "Sep", "Oct", "Nov", "Dec" }; 

मेरे लिए ++ जी के साथ ठीक संकलित करता है तथा मैं था यह कहीं और संकलित करने की उम्मीद है। मुझे उम्मीद है कि आपकी त्रुटियां std:: नामस्थान की कमी के कारण हैं।

+1

मैं अपने ARRAY_CAPACITY घोषणा में एक कोलन खो रहा था! आंकड़े, जैसे ही मैं यहां पोस्ट करता हूं, मैं अपनी समस्या का पता लगाता हूं। इस तरह के एक प्राथमिक प्रश्न के साथ आप को परेशान करने के लिए खेद है। मुझे सही वाक्यविन्यास प्रदान करने के लिए धन्यवाद! – Alex

6

हाँ, यह करता है:

#include <string> 

int main(void) 
{ 
    static const size_t Capacity = 12; 
    std::string Months[Capacity] = { "Jan", "Feb", "Mar", "April", "May", 
             "June", "July", "Aug", "Sep", "Oct", 
             "Nov", "Dec" }; 
} 

आपका त्रुटियों शायद कुछ और से संबंधित थे। क्या आपको std:: का उपयोग करना याद आया? बिना जानने के, यह कुछ भी हो सकता है। Capacity गलत आकार था? आदि

नोट करें कि आपका कोड वास्तव में एक स्थिर सरणी नहीं था। आप वास्तव में, Capacity की जरूरत नहीं है के रूप में दूसरों दिखाई देगा, और आप const char* इस्तेमाल कर सकते हैं यदि आप चाहें, हालांकि आप std::string इंटरफ़ेस खो

#include <string> 

int main(void) 
{ 
    static const size_t Capacity = 12; 
    static const std::string Months[Capacity] = { "Jan", "Feb", "Mar", "April", 
/* ^^^^^^^^^^^^ */         "May", "June", "July", "Aug", 
                "Sep", "Oct", "Nov", "Dec" }; 
} 

इसके अलावा, यह है।

0

हां। जब तक संकलक समझता है कि संकलक stringstd::string है और जब तक {} के बीच प्रारंभकर्ताओं की संख्या ARRAY_CAPACITY से अधिक नहीं है, तब तक संकलक समझता है।

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

const std::string MONTHS[ARRAY_CAPACITY] = { "Jan", /* and so on ... */ }; 
2

लगातार तार की एक सरणी शायद cstrings की एक सरणी होगा के लिए पसंदीदा तरीका,

const char* MONTHS[] = { "Jan", "Feb", "Mar", "April", "May", "June", "July", 
    "Aug", "Sep", "Oct", "Nov", "Dec" }; 

हालांकि, यह भी std :: तार के साथ किया जा सकता है,

const string MONTHS[] = { string("Jan"), string("Feb"), ... }; 

कुछ कंपाइलर घुंघराले ब्रेसिज़ के साथ सरणी प्रारंभ करते समय char * से std :: स्ट्रिंग से अंतर्निहित रूपांतरण की अनुमति नहीं दे सकते हैं; एक char * से निर्मित एक std :: स्ट्रिंग को स्पष्ट रूप से असाइन करना इसे ठीक करेगा।

0

हां, दृश्य सी ++ इसका समर्थन करता है - मैंने अभी कुछ ऐसा ही किया है। सी ++ के अन्य संस्करणों के बारे में निश्चित नहीं है।

क्या आपने पुस्तकालय शामिल किया है? ARRAY_CAPACITY की परिभाषा क्या है?

जब आप 'अक्षम' कहते हैं, तो क्या आपका मतलब है कि आपके पास कंपाइलर/लिंकर त्रुटियां थीं या कुछ और?क्या आप अधिक जानकारी प्रदान कर सकते हैं?

0

मुझे लगता है कि आप std :: string का उपयोग करना चाहते हैं, लेकिन सी ++ में यह संभव नहीं है। या कम से कम यह आसान नहीं है। आप std :: स्ट्रिंग के बजाय एक साधारण कॉन्स char * माह [ARRAY_CAPACITY] = {"Jan", ...} के बजाय उपयोग कर सकते हैं; यह पहले से ही चाल है।

यदि आप वास्तव में std :: स्ट्रिंग का उपयोग करना चाहते हैं तो आप एसटीएल कंटेनर और बूस्ट लाइब्रेरी (www.boost.org) पर एक नज़र डालना चाहते हैं। विशेष रूप से बढ़ावा दें :: असाइन करें जो कुछ ऐसा कर सकता है जैसा आप करना चाहते हैं।

सादर, माइकल

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