236

我正在运行 Windows 7 French 并且我正在尝试编译这个非常基本的程序,但是 Visual Studio 很固执并且拒绝遵守。我还尝试在Coliru上使用 GCC 4.7 和 Clang 主干编译它,我得到或多或少相同的错误(输出在代码下方),尽管我认为 Coliru 在英文操作系统上运行,所以我不希望它无论如何都能工作.

我究竟做错了什么?我该如何解决?

代码

#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
     ^
4

15 回答 15

151

问题显然是您包含了错误的标准标题:

#inclure <iostream>

应该:

#inclure <fluxes>

此外,如果您使用 Studio Visuel Micromou 或 CCG(代表“Collection de Compilateurs GPU”,顺便说一句)工具,而不是它们更常见的 MVS 或 GCC 亲戚,您会发现效果更好。

于 2014-04-01T08:35:17.343 回答
111
  1. 你有一个语义错误 - 入口函数的第二个参数应该是 type cara**,而不是ent**

    ent principal(ent argn, cara** argm)
    
  2. 对于<iostream>错误,@MartinJ。已经正确指出您应该<esflux>改用它。

  3. 关于其他错误,您的编译器似乎只是在罢工。编译法语代码时偶尔会发生这种情况,并且应该在几天内自行修复。

于 2014-04-01T09:12:01.390 回答
62

许多问题是由于缓存造成的,但您的问题是另一种难题:命名事物。是的,本地化很难。

您没有提到您使用的是法语的哪个变体,但从错误消息中,我认为您使用的是“法语(法国)”(我们文明操作系统的用户称之为fr_FR)。MS 的fr_FR语言环境以一种非常奇怪的方式表现:大写重音字母映射到它们的非重音对应物(为了与某些打字机型号向后兼容)。所以你需要写SORTIE_SUCCES而不是SORTIE_SUCCÈS.

一种解决方法是使用“法语(摩纳哥)”(fr_MC)语言,其中大写重音字母按预期工作。不幸的是,摩纳哥版本的编译器非常昂贵。您也可以使用加拿大法语、比利时法语或瑞士法语版本,但这些都要求您提交双语 ( fr_CA+ en_CA)、三语 ( fr_BE+ nl_BE+ de_BE) 或四语 ( fr_CH+ it_CH+ de_CH+ rm_CH) 源文件。法语的非洲变体已淘汰,因为它们太穷而无法负担 C++ 编译器,但是您可以改用 C。

然后您的程序中还有其他语法错误:

  • 你忘了翻译一些关键词。
  • 请注意,编译器和文档并不总是对同一个词使用相同的翻译。
  • 您没有考虑到形容词在法语中的名词之后的事实。
  • 您使用了错误类型的引号。

我在 Émaxe 51,70 中包含的 C++ 编译器中尝试了以下代码,它会起作用:

#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ÈS ;
}

有些语言比 C++ 有更好的国际化支持。例如,这是一个LOGO中的程序(当然不要与LOGO混淆)。

pour exemple
  répète 18 [av 5 td 10]
  td 60
  répète 18 [av 5 td 10]
fin
于 2014-04-01T18:28:28.760 回答
51

我正在尝试编译这个非常基本的程序

这不是 BASIC 程序,因此 Visual Studio 不知道如何处理它。

此外,在法语系统上,您需要将程序传递给编译器。

于 2014-04-01T11:18:24.077 回答
44

你好Légèreté fait la course en orbite

我想强调的是,即使您遵循此处给出的所有答案,由于标点符号,您的程序仍然无法编译。在法语中,分号前面有一个不间断的空格。

我会推荐以下内容:

#inclure <esflux>

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

请注意我改成argnnarg,因为它在法语中更自然(尽管与匈牙利符号无关)!

编辑:遵循angew的建议

于 2014-04-01T09:11:30.873 回答
35

之前的答案几乎涵盖了所有内容,但如果我可以补充:

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

这是允许的,但通常首选以下内容:

capitulation ; // a better, frenchier approach
于 2014-04-01T13:11:35.830 回答
17

您需要参考法语预处理器:

#inclure <Montebourg>

嗯...为时已晚,已弃用。新版本将于本周发布。

于 2014-04-01T13:30:45.263 回答
17

I realize this doesn't apply to this particular situation, but it's important to keep in mind the gender of your objects when programming in French. There are 2 types of classes (genre) genre::masculins and genre::féminin

For instance:

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

Furthermore, when passing this to another function the function call is prefixed with the parameter list rather than suffixed:

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

or

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

For further reference: Wikipedia Word Order

于 2014-04-01T14:10:18.160 回答
15

如果您在午餐时间(下午 12 点至 2 点)后重试怎么办?此外,如果您获得一个以上的处理器,他们可能会罢工。但是,您可以使用此(法语)Windows 7 命令取回您的 proc:

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

当你被卡住时重复一遍(但不要忘记每次都降低数字!)。

于 2014-04-01T15:00:26.010 回答
10

好像你忘记安装FrenChPP++包了。成功安装后(如果您的系统没有二进制包,您将需要FrenChPP++在标准 c++ 编译器上编译(我们在 Unauthorized Frog 建议使用 g++,但也可以随意使用 clang,但忽略警告))您将需要创建一个新项目,然后将其复制粘贴到新创建的principal.fcpp文件中。然后在执行时,FrenChPP++预编译器(其工作方式与 Qt 处理其信号/插槽机制的方式非常相似)将解析所有.fcpp文件并将“翻译”.fcpp为有效文件.cpp,然后使用您的系统默认编译器编译它们。

于 2014-04-01T08:59:07.753 回答
7

您可能需要为 C++11 安装法语语言包。如果找不到,请尝试http://www.bing.com/translator

于 2014-04-01T08:45:52.393 回答
7

您的代码中有很多错误,其中大多数已经在其他答案中得到解决。但是你不知道它的创建者C++设计它是为了让程序源代码在翻译时不会变得太长吗?

不是std::cendehors,而是std::dehdehors的缩写)std::cin翻译为std::deddedans)。

另请注意,曾经有一些编译器不会自动刷新\n,因此最好使用std::findl( fin de ligne )。所以它应该是这样的:

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

编辑:对不起,我没有发现另一个错误。正确的形式当然是使用这样的 guillemets:

   std::deh << «Bonjour le monde!» << std::findl; 
于 2014-04-01T17:17:10.563 回答
5

您不能在 C++(或 C)程序中使用法语关键字。你应该编码

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

同样

 return EXIT_SUCCESS;

当然还有代码int main(int argc, char**argv) 等...

(谢谢你的愚人节玩笑!)

于 2014-04-01T08:27:58.097 回答
4

由于乔治·布什先生禁止炸薯条,转而使用更美味的 Liberty Fries(以及味道较差但同样爱国的 Freedom Fries),其他美国公司也在其产品中取消对法语的支持。

您需要使用 2003 年之前的编译器,或发送邮件到http://www.whitehouse.gov/contact/submit-questions-and-comments询问他们是否计划尽快恢复这种情况。

于 2014-04-01T22:01:24.433 回答
3

首先,你需要

#inclure <clibstd>

在您能够使用 SORTIE_SUCCÈS 常量之前。

您的 C++ 代码的另一个问题是您忘记使用 std::lend 而是在输出字符串中使用 '\n' - 它在法语代码中不起作用,显然,只允许使用英语和俄语编写的代码要做到这一点。

更重要的是,您使用了错误的缩进(法语上的 GCC 需要制表符而不是空格)和大括号放置(您需要尽可能将大括号放在同一行,它们之间不允许有空格);保持它们不变将在您的代码中生成“vous ne connaissez pas votre tabulation, Jacques”和“pas assez d'amour entre accolades”运行时错误。

在我更改了这些行之后,代码成功编译。它仍然没有运行,可能是由于这里指定的原因。

片段:http: //ideone.fr/sQbL6E

于 2014-04-01T16:29:00.093 回答