मेरा कार्यक्रम फ्रेंच में विंडोज 7 के तहत संकलन क्यों नहीं कर सकता है? [बन्द है]


237

मैं विंडोज 7 फ्रेंच चला रहा हूं और मैं वास्तव में बुनियादी कार्यक्रम को संकलित करने की कोशिश कर रहा हूं, लेकिन विजुअल स्टूडियो जिद्दी हो रहा है और अनुपालन करने से इनकार कर रहा है। मैंने कोलिरू पर जीसीसी 4.7 और क्लैंग ट्रंक दोनों के साथ इसे संकलित करने की कोशिश की और मुझे कमोबेश एक ही तरह की त्रुटियां होती हैं (आउटपुट कोड के नीचे है), हालांकि मुझे लगता है कि कॉलिरू एक अंग्रेजी ओएस पर चलता है, इसलिए मुझे वैसे भी काम करने की उम्मीद नहीं होगी ।

मैं क्या गलत कर रहा हूं? और मैं इसे कैसे ठीक कर सकता हूं?

कोड

#inclure <iostream>

ent principal(ent argn, ent** argm)  // entier, nombre d'arguments, valeur des arguments
{
   std::cendehors << "Bonjour le monde!\n";
   renvoi SORTIE_SUCCÈS;
}

उत्पादन

principal.cpp:1:6: erreur: prétraitement de la directive invalide #inclure
     #inclure <iostream>
      ^
principal.cpp:6:8: erreur: '\303' égaré dans le programme
        renvoi SORTIE_SUCCÈS;
        ^
principal.cpp:6:8: erreur: '\210' égaré dans le programme
principal.cpp:3:5: erreur: «ent» ne désigne pas un type
     ent principal(ent argn, ent** argm)  // entier, nombre d'arguments, value des arguments
     ^

3
आपको संभवतः std::findeligneएक \nपात्र का उपयोग करने के बजाय उपयोग करना चाहिए :)
एलिउ

66
यह 1 अप्रैल के लिए एक मजाक सवाल की तरह दिखता है .....
बेसिल स्टायरनेविच

2
क्या आप सुनिश्चित हैं कि iostreamफ्रेंच में हेडर का सही नाम क्या है?
बार्ट वैन नीरोप

9
मुझे लगता है कि समस्या आपके द्वारा चुनी गई भाषा में है।
फूप्स

2
संकलक पर नीचे मत देखो, वह और मैं दोनों को फ्रेंच सीखने में मुश्किल हुआ। हम अपना सर्वश्रेष्ठ प्रयास कर रहे हैं, इसलिए हमें सीखने के लिए कम से कम 6-8 और सप्ताह दें!
user1942027

जवाबों:


62

कई समस्याएं कैशिंग के कारण होती हैं , लेकिन आपकी अन्य प्रकार की कठिन समस्याओं में से एक है : चीजों का नामकरण। हां, स्थानीयकरण कठिन है।

आपने उल्लेख नहीं किया है कि आप किस फ्रेंच के किस संस्करण का उपयोग कर रहे हैं, लेकिन त्रुटि संदेश से, मुझे लगता है कि आप "फ्रेंच (फ्रांस)" (जिसे हम सभ्य ओएस के उपयोगकर्ता कहते हैं fr_FR) का उपयोग कर रहे हैं । एमएस का fr_FRस्थान बहुत ही अजीब तरीके से व्यवहार करता है: अपरकेस उच्चारण अक्षरों को उनके अस्वीकार्य समकक्ष (कुछ टाइपराइटर मॉडल के साथ पिछड़े संगतता के लिए) में मैप किया जाता है। इसलिए आपको SORTIE_SUCCESइसके बजाय लिखने की जरूरत है SORTIE_SUCCÈS

वर्कअराउंड "फ्रेंच (मोनाको)" ( fr_MC) भाषा का उपयोग करना है , जहां अपरकेस उच्चारण अक्षरों को अपेक्षित रूप से काम करता है। दुर्भाग्य से, कंपाइलर का मोनाको संस्करण बहुत महंगा है। तुम भी कनाडा के फ्रेंच, बेल्जियम के फ्रेंच या स्विस फ्रेंच संस्करण इस्तेमाल कर सकते हैं, लेकिन इन सब की आवश्यकता है कि आप एक द्विभाषी (प्रस्तुत fr_CA+ en_CA, त्रिभाषी () fr_BE+ nl_BE+ de_BE) या quadrilingual ( fr_CH+ it_CH+ de_CH+ rm_CH) स्रोत फ़ाइल। फ्रेंच के अफ्रीकी वेरिएंट बाहर हैं क्योंकि वे सी ++ संकलक को खरीदने के लिए बहुत गरीब हैं, हालांकि आप इसके बजाय सी का उपयोग कर सकते हैं।

फिर आपके प्रोग्राम में अन्य सिंटैक्स त्रुटियाँ हैं:

  • आप कुछ कीवर्ड का अनुवाद करना भूल गए।
  • ध्यान रखें कि संकलक और प्रलेखन हमेशा एक ही शब्द के लिए एक ही अनुवाद का उपयोग नहीं करते हैं।
  • आप इस तथ्य के लिए जिम्मेदार नहीं थे कि विशेषण फ्रांसीसी में संज्ञा के बाद आते हैं।
  • आप गलत प्रकार के उद्धरणों का उपयोग कर रहे हैं।

मैंने Imaxe ५१, ,० में शामिल C ++ कंपाइलर में निम्नलिखित कोड की कोशिश की, और यह wollun दिया:

#inclure <fluxes>

principal ent(argn ent, argm **ent)  // entier, nombre d'arguments, valeur des arguments
{
   norme::sortiec << « Bonjour à tout le monde !\n » ;
   retourner SORTIE_SUCCÈ;
}

कुछ भाषाओं में C ++ से बेहतर अंतर्राष्ट्रीयकरण समर्थन है। उदाहरण के लिए, यहाँ लोगो ( निश्चित रूप से लोगो के साथ भ्रमित नहीं होना ) में एक कार्यक्रम है ।

pour exemple
  répète 18 [av 5 td 10]
  td 60
  répète 18 [av 5 td 10]
fin

151

समस्या स्पष्ट रूप से है कि आप गलत मानक हेडर सहित हैं:

#inclure <iostream>

होना चाहिए:

#inclure <fluxes>

इसके अलावा, आप पाएंगे कि यह अधिक बेहतर है आप अपने अधिक सामान्य एमवीएस या जीसीसी रिश्तेदारों के बजाय स्टूडियो विज़ुएल मिक्रोमो या सीसीजी ("संग्रह डी कॉम्पीलेटर्स जीपीयू", बीडब्ल्यूटी) उपकरण का उपयोग करते हैं।


5
अपने हेडर फ़ाइलों को एक्सटेंशन देने के लिए सावधान रहें «।» »« En-
ttete

2
@ArlaudPierre: यह पता चला है कि आप अपनी हेडर फ़ाइलों के लिए जो भी एक्सटेंशन का उपयोग कर सकते हैं, सी-स्टैंडर्ड-लाइब्रेरी-हेडर फ़ाइलों को छोड़कर जो .eएक्सटेंशन का उपयोग करने के लिए आवश्यक हैं । लेकिन निश्चित रूप से, इस तरह के रूप मानक एक्सटेंशन .e, .ee, .eppसम्मेलन द्वारा पसंद कर रहे हैं ... जानकारी के लिए: stackoverflow.com/questions/441568/...
मार्टिन जे

@MartinJ। ठीक है, हालांकि मेरा मतलब यह नहीं था कि जब मैंने कहा कि "सावधान रहना" अनिवार्य था।
पियरे अरलाउड


5
मुझे याद है कि डी गॉल ने "विवे ले लॉजिकेल लिबरे!" कहा ...
एक्सल

111
  1. आपके पास शब्दार्थ त्रुटि है - प्रविष्टि फ़ंक्शन का दूसरा तर्क टाइप का होना चाहिए cara**, न कि ent**:

    ent principal(ent argn, cara** argm)
  2. के लिए <iostream>त्रुटि, @MartinJ। पहले से ही सही ढंग से बताया गया है कि आपको <esflux>इसके बजाय उपयोग करना चाहिए ।

  3. अन्य त्रुटियों के बारे में, ऐसा लगता है कि आपका संकलक केवल हड़ताल पर है। ऐसा कभी-कभार हो सकता है जब फ्रेंच कोड का संकलन किया जाता है, और कुछ दिनों में खुद को ठीक करना चाहिए।


51

मैं इसे वास्तव में बुनियादी कार्यक्रम संकलित करने की कोशिश कर रहा हूं ।

यह एक बेसिक कार्यक्रम नहीं है, इसलिए विज़ुअल स्टूडियो को नहीं पता है कि इसके साथ क्या करना है।

इसके अलावा, एक फ्रांसीसी प्रणाली पर, आपको कंपाइलर को एक प्रोग्राम पास करना होगा।


6
"एक कार्यक्रम पास करने के लिए " <3
पियरे अरलाउड

5
तो आप क्या कह रहे हैं, "Ceci n'est pas une प्रोग्राम BASIC।"
स्टुअर्ट ऑलसेन

44

हैलो लेग्रेट फेट ला कोर्स एन परिक्रमा ,

मैं इस बात पर जोर देना चाहता हूं कि भले ही आप यहां दिए गए सभी उत्तरों का पालन करते हैं, लेकिन आपका कार्यक्रम आपके विराम चिह्न के कारण अभी भी संकलित नहीं होगा। सेमीकोलन फ्रांसीसी में एक गैर-ब्रेकिंग स्पेस से पहले होता है।

मैं निम्नलिखित की सिफारिश करूंगा:

#inclure <esflux>

ent principal(ent narg, cara** marg)  // entier, nombre d'arguments, valeur des arguments
{
   std::cendehors << "Bonjour le monde !\n" ;
   renvoyer SORTIE_SUCCÈ;
}

कृपया ध्यान दें कि मैं बदल argnगया narg, क्योंकि यह फ्रेंच में अधिक स्वाभाविक है (हालांकि आयु नोटेशन के साथ कुछ भी नहीं करना है)!

संपादित करें: angew की सिफारिश का पालन किया


35

पिछले उत्तरों में बहुत कुछ सब कुछ कवर किया गया है, लेकिन अगर मैं जोड़ सकता हूं:

renvoyer SORTIE_SUCCÈS ; // correct, but bad pratice

इस है certes अनुमति है, लेकिन निम्नलिखित आमतौर पर पसंद किया जाता है:

capitulation ; // a better, frenchier approach

3
फ्रेंच सी में दो शब्दार्थ समतुल्य नहीं हैं?

17

आपको फ्रेंच पूर्व-प्रोसेसर का संदर्भ देना होगा:

#inclure <Montebourg>

हम्म ... बहुत देर हो गई, यह पदावनत हो गया। नई रिलीज इस सप्ताह उपलब्ध होगी।


17

मुझे एहसास है कि यह इस विशेष स्थिति पर लागू नहीं होता है, लेकिन फ्रेंच में प्रोग्रामिंग करते समय अपनी वस्तुओं के लिंग को ध्यान में रखना महत्वपूर्ण है। 2 प्रकार के वर्ग ( genre) genre::masculinsऔर हैंgenre::féminin

उदाहरण के लिए:

genre::masculins Hommes {}
genre::féminin Femme {}

इसके अलावा, जब thisदूसरे फ़ंक्शन में पास किया जाता है तो फ़ंक्शन कॉल प्रत्यय के बजाय पैरामीटर सूची के साथ उपसर्ग किया जाता है:

genre::masculins Croissant {
    nul nourrir(Hommes hommes) {
        hommes.(ce)manger ;
    }
}

या

genre::féminin Grenouille {
    nul nourrir(Hommes hommes) {
        hommes.(cette)manger;
    }
}

आगे के संदर्भ के लिए: विकिपीडिया शब्द क्रम


15

यदि आप दोपहर के भोजन के समय (12-2 बजे) के बाद पुन: प्रयास करते हैं तो क्या होगा? इसके अलावा, यदि आप अधिक प्राप्त करते हैं, तो एक प्रोसेसर, वे हड़ताल पर हो सकते हैं। आप इस (फ्रेंच) विंडोज 7 कमांड के साथ अपनी खरीद वापस पा सकते हैं:

set max-working-hours-a-week = 35

जब आप फंस गए हों तो दोहराएं (लेकिन हर बार संख्या कम करना न भूलें!)।


2
+1, और मुझे लगता है कि set pension-starting-age = 62यह भी मदद कर सकता है, set pension-starting-age = 60जल्द ही बदल सकता है ...
Axel

बेशक, पेंशन शुरू करने की उम्र भी कर सकता है! O avais-je la tête? :-)
सिल्वेन रोड्रिग्यू

10

लगता है कि आप FrenChPP++पैकेज स्थापित करना भूल गए हैं । एक सफल स्थापना के बाद (आपको FrenChPP++मानक c ++ संकलक पर संकलन करने की आवश्यकता होगी यदि आपके सिस्टम के लिए कोई बाइनरी पैकेज नहीं हैं (हम अनधिकृत मेंढक इसके लिए g ++ का उपयोग करने की सलाह देते हैं, लेकिन बेझिझक उपयोग करने के लिए स्वतंत्र महसूस करते हैं, लेकिन चेतावनियों को अनदेखा करते हैं)) आपको एक नई परियोजना बनाने की आवश्यकता होगी, और नए बनाए गए principal.fcppफ़ाइल में बस इसे कॉपी पेस्ट करें । फिर FrenChPP++प्री-कंपाइलर को निष्पादित करने पर (जो कि क्यूटी अपने संकेतों / स्लॉट तंत्र को संभालने के तरीके से बहुत समान रूप से काम करता है) सभी .fcppफाइलों को पार्स कर देगा और .fcppमान्य में अनुवाद करेगा .cppऔर फिर आपके सिस्टम डिफ़ॉल्ट कंपाइलर का उपयोग करके उन्हें संकलित करेगा।




7

आपके कोड में बहुत सारी त्रुटियां हैं, उनमें से अधिकांश पहले से ही अन्य उत्तरों में दी गई हैं। लेकिन क्या आपको पता नहीं है कि C++इसे डिज़ाइन करने वाले प्रोग्रामर्स कोड का अनुवाद किए जाने के दौरान मोटे तौर पर नहीं मिलते हैं?

ऐसा नहीं है std::cendehors, लेकिन std::deh(के लिए कम dehors के रूप में) std::cinके लिए अनुवाद करने के लिए std::ded(के लिए dedans )।

यह भी ध्यान दें कि ऐसे कंपाइलर हुआ करते थे जो अपने आप फ्लश नहीं करते थे \n, इसलिए इसका उपयोग करना बेहतर है std::findl( फिन डी लिग्ने )। तो यह इस तरह होना चाहिए:

   std::deh << "Bonjour le monde!" << std::findl; 

संपादित करें: क्षमा करें, मैंने एक और गलती नहीं की। पाठ्यक्रम का सही रूप इस तरह से guillemets का उपयोग कर रहा है:

   std::deh << «Bonjour le monde << std::findl; 

2
अच्छी तरह से उद्धरण चिह्नों के लिए देखा जाता है
javav

जब प्रक्रिया समाप्त हो गई तो क्या उन कंपाइलरों को अभी भी आउटपुट को फ्लश नहीं करना है?
२-२४५ पर ऑर्बिट

1
@LightnessRacesinOrbit: हाँ, सिद्धांत रूप में आप सही हैं, लेकिन फ्रांस में फ्लशिंग के रूप में फ्रेंच संस्करण में कार्यान्वयन में अंतर से सावधान रहें, अवांछित परिणाम हो सकते हैं ( en.wikipedia.org/wiki/French_toilet )।
एक्सल

5

आप C ++ (या C) प्रोग्राम में फ़्रेंच कीवर्ड का उपयोग नहीं कर सकते। आपको कोड करना चाहिए

 #include <iostream>
 //  ^^^  the english word "include" 

और इसी तरह

 return EXIT_SUCCESS;

और निश्चित रूप से कोड int main(int argc, char**argv) आदि ...

(आपके अप्रैल फूल के मजाक के लिए धन्यवाद!)


9
क्या सचमे? यह हमेशा मेरे लिए अतीत में काम किया है। क्या कुछ संकलक ध्वज मैं सेट कर सकता हूं?
ऑर्बिट

शायद #define SORTIE_SUCC EXS EXIT_SUCCESS
जैरी

1
"इल इस्ट मैनक्वांट एस्पेस ...": जिसने भी अनुवाद किया वह फ्रेंच नहीं जानता। (अनुभव से: संकलक के अनुवादित संस्करणों से बचें। तकनीकी रूप से कई के अनुवादों पर औपचारिक रूप से स्थापित और सार्वभौमिक रूप से सहमत नहीं हैं , और आप यह जानने के लिए अनुवादकों की पसंद का अनुमान लगाने की कोशिश करेंगे। त्रुटि संदेशों का वास्तव में मतलब है।)
जेम्स कांज़

18
@JamesKanze: तो क्या आपको लगता है कि स्पैनिश बेहतर काम कर सकता है? या?
842 में ऑर्बिट

2
तब ठीक है, वहाँ एक प्रतिनिधि है tranlaste C ++, FrenC github.com/carado/FranC देखें , यह #define का बहुत कुछ है: D
Lesto

4

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

आपको 2003 से पहले के संकलक का उपयोग करने की आवश्यकता है, या यह पूछने के लिए कि वे जल्द ही स्थिति को पलटने की योजना बनाने के लिए http://www.whitehouse.gov/contact/submit-questions-and-comments पर एक मेल भेजें ।


3

सबसे पहले, आप की जरूरत है

#inclure <clibstd>

इससे पहले कि आप SORTIE_SUCC constantS का निरंतर उपयोग कर सकें।

आपके C ++ कोड के साथ एक और समस्या यह है कि आप std :: lend का उपयोग करना भूल गए हैं और इसके बजाय अपने आउटपुट स्ट्रिंग में '\ n' का उपयोग किया है - यह फ्रेंच कोड में काम नहीं करेगा, जाहिर है, केवल अंग्रेजी और रूसी में लिखे गए कोड की अनुमति है ऐसा करने के लिए।

इससे भी अधिक, आपने गलत इंडेंटेशन का इस्तेमाल किया (फ्रेंच पर जीसीसी को रिक्त स्थान के बजाय टैब की आवश्यकता होती है) और ब्रेस प्लेसमेंट (आपको जब भी संभव हो उसी पंक्ति पर ब्रेसिज़ लगाने की आवश्यकता होती है, उनके बीच कोई रिक्त स्थान की अनुमति नहीं है); उन्हें अपरिवर्तित रखने से आपके कोड में "vous ne connaissez pas votre tabulation, Jacques" और "pas assez d'amour entreades" रनटाइम त्रुटियां उत्पन्न होंगी।

मैंने उन पंक्तियों को बदलने के बाद, कोड सफलतापूर्वक संकलित किया। यह अभी भी नहीं चला है, शायद यहाँ निर्दिष्ट कारणों के लिए ।

स्निपेट: http://ideone.fr/sQbL6E

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.