469 votes

Pourquoi ce programme est-il à tort rejeté par trois compilateurs C++?

J'ai quelques difficultés à la compilation d'un programme C++ que j'ai écrit.

Ce programme est très simple et, au meilleur de ma connaissance, est conforme à toutes les règles énoncées dans la Norme C++. J'ai lu l'intégralité de la norme ISO/IEC 14882:2003 deux fois pour être sûr.

Le programme est comme suit:

enter image description here

Voici le résultat que j'ai reçu lorsque vous essayez de compiler ce programme avec Visual C++ 2010:

c:\dev>cl /nologo helloworld.png
cl : Command line warning D9024 : unrecognized source file type 'helloworld.png', object file assumed
helloworld.png : fatal error LNK1107: invalid or corrupt file: cannot read at 0x5172

Consterné, j'ai essayé de g++ 4.5.2, mais il est tout aussi inutile:

c:\dev>g++ helloworld.png
helloworld.png: file not recognized: File format not recognized
collect2: ld returned 1 exit status

J'ai pensé que Clang (version 3.0 tronc 127530) doivent travailler, car c'est très apprécié pour sa conformité aux normes. Malheureusement, il n'a même pas me donner un de ses jolis, a mis en évidence des messages d'erreur:

c:\dev>clang++ helloworld.png
helloworld.png: file not recognized: File format not recognized
collect2: ld returned 1 exit status
clang++: error: linker (via gcc) command failed with exit code 1 (use -v to see invocation)

Pour être honnête, je ne sais pas vraiment ce que l'un de ces message d'erreur signifie.

De nombreux autres programmes C++ les fichiers source sont avec un .rpc extension, alors j'ai pensé que peut-être j'ai besoin de renommer mon fichier. J'ai changé son nom pour helloworld.cppmais cela n'a pas aidé. Je pense qu'il y a un très sérieux problème de Bruit parce que quand j'ai essayé de l'utiliser pour compiler le nouveau nom de programme, il a pété les plombs, imprimé "84 les avertissements et les 20 erreurs générées." et mon ordinateur bip beaucoup!

Qu'ai-je fait de mal? Ai-je oublié certaines critiques partie de la Norme C++? Ou sont tous les trois compilateurs vraiment juste tellement cassé qu'ils ne peuvent pas compiler ce programme simple?

575voto

Sven Points 695

À l'origine de Overv @ reddit.

320voto

Benoit Points 35553

Essayez de cette façon:

enter image description here

211voto

Bala R Points 57552

Votre < et >, ( et ), { et } ne semblent pas correspondre très bien; Essayez de le faire mieux.

173voto

GManNickG Points 155079

Dans la norme, §2.1/1 spécifie:

Source physique de fichier caractères sont mis en correspondance, la mise en œuvre définies de manière à la source de base de jeu de caractères (introduction de la nouvelle ligne de caractères de fin de ligne des indicateurs) si nécessaire.

Votre compilateur ne supporte pas ce format (aka ne peut pas correspondre à la source de base de jeu de caractères), de sorte qu'il ne peut pas se déplacer dans d'autres étapes de traitement, d'où l'erreur. Il est tout à fait possible que votre compilateur soutien d'une cartographie à partir d'une image de base de la source de jeu de caractères, mais n'est pas tenu de le faire.

Depuis cette cartographie est mise en œuvre défini, vous aurez besoin de regarder votre implémentations de la documentation pour voir les formats de fichier pris en charge. Généralement, toutes les grandes fournisseur de compilateur prend en charge (canoniquement défini) les fichiers de texte: aucun fichier produit par un éditeur de texte, généralement une série de caractères.


Notez que la norme C++ est basé sur la norme (§1.1/2), et C(99) standard dit, dans le §1.2:

La présente Norme Internationale ne précise pas
- le mécanisme par lequel les programmes C sont transformés pour l'usage d'un traitement de données système;
- le mécanisme par lequel les programmes C sont appelés pour une utilisation par un traitement de données système;
- le mécanisme par lequel les données d'entrée sont transformées pour une utilisation par un programme C;

Donc, encore une fois, le traitement des fichiers source est quelque chose que vous devez rechercher dans vos compilateurs de la documentation.

156voto

sje397 Points 23619

Vous pouvez essayer le script python ci. Notez que vous devez installer PIL et pytesser.

from pytesser import *
image = Image.open('helloworld.png')  # Open image object using PIL
print image_to_string(image)     # Run tesseract.exe on image

Pour l'utiliser, faire:

python script.py > helloworld.cpp; g++ helloworld.cpp

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X