我在编译我写的c++程序时遇到了一些困难。

这个程序非常简单,据我所知,它符合c++标准中规定的所有规则。我已经把ISO/IEC 14882:2003通读了两遍。

程序如下:

下面是我在尝试用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

沮丧地,我尝试了g++ 4.5.2,但它同样没有帮助:

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

我认为Clang(3.0版本trunk 127530)一定可以工作,因为它的标准一致性受到了高度赞扬。不幸的是,它甚至没有给我一个漂亮的,突出显示的错误消息:

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)

老实说,我真的不知道这些错误消息是什么意思。

许多其他c++程序都有扩展名为.cpp的源文件,所以我想可能需要重命名我的文件。我把它的名字改为helloworld.cpp,但这并没有帮助。我认为Clang有一个非常严重的错误,因为当我试图用它来编译重命名的程序时,它跳出来,打印出“84个警告和20个错误生成”,让我的计算机发出很多哔哔声!

我哪里做错了?我是否错过了c++标准的某些关键部分?或者这三个编译器真的坏到不能编译这个简单的程序?


当前回答

这个程序是有效的——我找不到错误。

我猜你的电脑里有病毒。最好是重新格式化驱动器,重新安装操作系统。

让我们知道这是如何工作的,或者如果你需要帮助重新安装。

我讨厌病毒。

其他回答

尝试切换输入接口。c++要求将键盘插入计算机,而不是扫描仪。这里可能有外围设备冲突的问题。如果键盘输入接口是强制性的,我没有检查ISO标准,但这对我使用过的所有编译器都是正确的。但也许扫描器输入现在在C99中可用,在这种情况下,你的程序应该确实工作。如果没有,你将不得不等待下一个标准版本和编译器的升级。

我把你的程序从PNG转换成ASCII,但它还没有编译。供您参考,我确实尝试了线宽为100和250个字符,但都产生了类似的结果。

   `         `  .     `.      `         ...                                                         
   +:: ..-.. --.:`:. `-` .....:`../--`.. `-                                                         
           `      `       ````                                                                      
                                                                      `                             
   ` `` .`       ``    .`    `.               `` .      -``-          ..                            
   .`--`:`   :::.-``-. : ``.-`-  `-.-`:.-`    :-`/.-..` `    `-..`...- :                            
   .`         ` `    ` .`         ````:``  -                  ` ``-.`  `                            
   `-                                ..                           ``                                
    .       ` .`.           `   `    `. ` .  . `    .  `    . . .` .`  `      ` ``        ` `       
           `:`.`:` ` -..-`.`-  .-`-.    /.-/.-`.-.  -...-..`- :```   `-`-`  :`..`-` ` :`.`:`- `     
            ``  `       ```.      ``    ````    `       `     `        `    `         `   `   .     
            : -...`.- .` .:/ `                                                                      
    -       `             `` .                                                                      
    -`                                                                                              
    `                                                                                               

您需要指定输出的精度,在最后一个右大括号之前紧接着使用冒号。由于输出不是数字,精度为零,所以需要这个-

:0}

问题在于语法定义,尝试使用尺子和圆规来进行更经典的描述!

欢呼,

您可以尝试下面的python脚本。注意,您需要安装PIL和pytesser。

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

要使用它,请执行:

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