Jam*_*lis 469 c++ compiler-errors clang visual-c++
编写我编写的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
Run Code Online (Sandbox Code Playgroud)
沮丧,我尝试了g ++ 4.5.2,但同样无益:
c:\dev>g++ helloworld.png
helloworld.png: file not recognized: File format not recognized
collect2: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)
我认为Clang(版本3.0主干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)
Run Code Online (Sandbox Code Playgroud)
说实话,我真的不知道这些错误信息是什么意思.
许多其他C++程序的源文件扩展名为.cpp,所以我想也许我需要重命名我的文件.我改名为helloworld.cpp,但这没有用.我认为Clang中存在一个非常严重的错误,因为当我尝试使用它来编译重命名的程序时,它会翻出来,打印出"84个警告和20个错误".并使我的电脑发出很多嘟嘟声!
我在这做错了什么?我是否错过了C++标准的一些关键部分?或者所有三个编译器真的如此破碎,以至于无法编译这个简单的程序?
Bal*_*a R 211
你<
和 >
,(
和 )
,{
和 }
似乎并不匹配得非常好; 尝试更好地绘制它们.
GMa*_*ckG 173
在标准中,§2.1/ 1规定:
如果需要,物理源文件字符以实现定义的方式映射到基本源字符集(引入行尾指示符的换行符).
您的编译器不支持该格式(也称不能将其映射到基本源字符集),因此它无法进入进一步的处理阶段,因此错误.您的编译器完全有可能支持从映像到基本源字符集的映射,但不是必需的.
由于此映射是实现定义的,因此您需要查看实现文档以查看它支持的文件格式.通常,每个主要编译器供应商都支持(规范定义)文本文件:文本编辑器生成的任何文件,通常是一系列字符.
请注意,C++标准基于C标准(§1.1/ 2),而C(99)标准在§1.2中表示:
本国际标准未规定
- C程序转换为数据处理系统使用的机制;
- 调用C程序供数据处理系统使用的机制;
- 转换输入数据以供C程序使用的机制;
因此,您需要在编译器文档中找到源文件的处理方式.
sje*_*397 156
您可以尝试以下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
Run Code Online (Sandbox Code Playgroud)
要使用它,请执行:
python script.py > helloworld.cpp; g++ helloworld.cpp
Run Code Online (Sandbox Code Playgroud)
bl0*_*ter 110
你忘了使用Comic Sans作为字体,这就是它出错的原因.
Mic*_*urr 75
在最后一个支撑后我看不到新线.
如您所知:"如果非空源文件不以换行符结尾,则......行为未定义".
Jer*_*her 74
这个程序有效 - 我找不到任何错误.
我的猜测是你的机器上有病毒.最好重新格式化驱动器,然后重新安装操作系统.
让我们知道这是如何工作的,或者如果您需要重新安装的帮助.
我讨厌病毒.
the*_*Man 62
我发现在我的显示器玻璃上用魔术标记写我的代码是有帮助的,尽管它看起来不错,当它非常黑.屏幕填满太快,然后给我一个干净的显示器的人每周给我打电话.
我的几个员工(我是一名经理)正准备给我买一台带有旋钮的红色电脑.他们说我不需要标记,我可以自己清洁屏幕,但是我必须小心摇晃它.我觉得它很精致.
这就是我聘请聪明人的原因.
hel*_*922 59
File format not recognized
您需要正确格式化您的文件.这意味着为您的代码使用正确的颜色和字体.查看每个编译器的具体文档,因为这些颜色在编译器之间有所不同;)
And*_*per 56
你忘记了预处理器.试试这个:
pngtopnm helloworld.png | ocrad | g++ -x 'c++' -
Run Code Online (Sandbox Code Playgroud)
Kev*_*ent 49
您是否手写程序然后将其扫描到计算机中?这就是"helloworld.png"所暗示的内容.如果是这种情况,您需要注意C++标准(即使在其最新版本中)不需要存在光学字符识别,遗憾的是它不包含在任何当前编译器中作为可选功能.
您可能需要考虑将图形转换为文本格式.可以使用任何纯文本编辑器; 使用文字处理器,虽然能够生成漂亮的打印输出,但很可能会导致您在尝试扫描时遇到的相同错误.
如果您真的喜欢冒险,可以尝试将代码写入文字处理器.打印,最好使用像OCR-A这样的字体.然后,将您的打印输出并重新扫描.然后可以通过第三方OCR包运行扫描以生成文本表单.然后可以使用许多标准编译器之一来编译文本形式.
但要注意,在调试阶段会产生很大的纸张成本.
Gro*_*fit 46
绘制下面的包含以使其编译:
#include <ChuckNorris>
Run Code Online (Sandbox Code Playgroud)
我听说他可以编译语法错误......
MSa*_*ers 40
不幸的是,您选择了三个都支持多种语言的编译器,而不仅仅是C++.他们都必须猜测你使用的编程语言.您可能已经知道,PNG格式适用于所有编程语言,而不仅仅是C++.
通常编译器可以找出语言本身.例如,如果PNG显然是用蜡笔绘制的,编译器就会知道它包含Visual Basic.如果它看起来像是用机械铅笔绘制的,那么很容易识别出工作中的工程师,编写FORTRAN代码.
在这种情况下,第二步对编译器也没有帮助.C和C++看起来太相似了,直到#include
.因此,您必须帮助编译器确定它实际上是什么语言.现在,您可以使用非标准方法.例如,Visual Studio编译器接受/ TC和/ TP命令行参数,或者您可以在项目文件中使用"Compile as:C++"选项.GCC和CLang有自己的机制,我不知道.
因此,我建议使用标准方法来告诉编译器以下代码是在C++中.正如你现在所发现的那样,C++编译器非常挑剔他们所接受的东西.因此,识别C++的标准方法是通过恐吓程序员添加到他们的C++代码中.例如,以下行将向您的编译器说明接下来是C++(并且他最好在没有抱怨的情况下编译它).
// To the compiler: I know where you are installed. No funny games, capice?
Run Code Online (Sandbox Code Playgroud)
Chr*_*ore 33
试试这个:
Rob*_*ett 27
OCR说:
N lml_?e <loJ+_e__}
.lnt Mk.,n ( ln+ _rSC Lhc_yh )
h_S_
_l
s_l . co__ <, " H llo uo/_d ! '` << s l? . ena_ .
TP__rn _ |
_|
Run Code Online (Sandbox Code Playgroud)
这是非常好,公平.
小智 20
我确实将您的程序从PNG转换为ASCII,但它还没有编译.为了您的信息,我尝试使用行宽100和250个字符,但两者的结果相当.
` ` . `. ` ...
+:: ..-.. --.:`:. `-` .....:`../--`.. `-
` ` ````
`
` `` .` `` .` `. `` . -``- ..
.`--`:` :::.-``-. : ``.-`- `-.-`:.-` :-`/.-..` ` `-..`...- :
.` ` ` ` .` ````:`` - ` ``-.` `
`- .. ``
. ` .`. ` ` `. ` . . ` . ` . . .` .` ` ` `` ` `
`:`.`:` ` -..-`.`- .-`-. /.-/.-`.-. -...-..`- :``` `-`-` :`..`-` ` :`.`:`- `
`` ` ```. `` ```` ` ` ` ` ` ` ` .
: -...`.- .` .:/ `
- ` `` .
-`
`
Run Code Online (Sandbox Code Playgroud)
Ant*_*ine 16
第一个问题是,您试图在main函数的末尾返回一个不正确的值.C++标准规定main()的返回类型是int,但是你试图返回空集.
另一个问题是 - 至少用g ++ - 编译器推断出文件后缀使用的语言.从g ++(1):
对于任何给定的输入文件,文件名后缀确定执行何种编译:
file.cc file.cp file.cxx file.cpp file.CPP file.c ++ file.C
必须预处理的C++源代码.请注意,在.cxx中,最后两个字母必须都是字面上的x.同样,.C指的是文字资本C.
修复这些应该会为您提供一个完整的Hello World应用程序,这可以从这里的演示中看到.
小智 8
你正在尝试编译图像.
输入您手写的文件名为main.cpp,通过编译器运行该文件,然后运行输出文件.
添加:
using namespace std;
Run Code Online (Sandbox Code Playgroud)
之后包括:P:D
尝试切换输入界面.C++希望将键盘插入计算机,而不是扫描仪.这里可能存在外围设备冲突问题.如果键盘输入接口是强制性的,我没有检查ISO标准,但对于我曾经使用过的所有编译器都是如此.但也许扫描仪输入现在可以在C99中使用,在这种情况下,您的程序应该确实有效.如果不是,您将不得不等待下一个标准版本和升级编译器.
我是唯一一个无法识别"返回"和分号之间的字符的人吗?那可能是它!