เหตุใดโปรแกรมนี้จึงถูกปฏิเสธโดยคอมไพเลอร์ C ++ สามตัว


468

ฉันมีปัญหาในการรวบรวมโปรแกรม 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 ลำตัว 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 ++ ไหม? หรือคอมไพเลอร์ทั้งสามตัวนี้เสียจริง ๆ จนพวกเขาไม่สามารถคอมไพล์โปรแกรมง่ายๆนี้ได้หรือไม่?

คำตอบ:


173

ในมาตรฐาน§2.1 / 1 ระบุ:

อักขระของไฟล์ต้นฉบับทางกายภาพถูกแมปในลักษณะที่กำหนดในการนำไปใช้กับชุดอักขระของแหล่งข้อมูลพื้นฐาน (แนะนำอักขระบรรทัดใหม่สำหรับตัวบ่งชี้สิ้นสุดบรรทัด) หากจำเป็น

คอมไพเลอร์ของคุณไม่สนับสนุนรูปแบบนั้น (aka ไม่สามารถแมปไปยังชุดอักขระพื้นฐาน ) ดังนั้นจึงไม่สามารถย้ายไปยังขั้นตอนการประมวลผลเพิ่มเติมดังนั้นจึงเกิดข้อผิดพลาด เป็นไปได้ทั้งหมดที่คอมไพเลอร์ของคุณรองรับการแมปจากภาพไปยังชุดอักขระพื้นฐาน แต่ไม่จำเป็นต้องใช้

เนื่องจากการจับคู่นี้กำหนดการใช้งานคุณจะต้องดูเอกสารการนำไปใช้งานของคุณเพื่อดูรูปแบบไฟล์ที่รองรับ โดยทั่วไปแล้วผู้จำหน่ายคอมไพเลอร์รายใหญ่ทุกรายจะสนับสนุนไฟล์ข้อความ (ที่กำหนดตามมาตรฐานของแคนนอน): ไฟล์ใด ๆ ที่ผลิตโดยโปรแกรมแก้ไขข้อความโดยทั่วไปจะเป็นชุดอักขระ


โปรดทราบว่ามาตรฐาน C ++ นั้นยึดตามมาตรฐาน C (§1.1 / 2) และมาตรฐาน C (99) กล่าวว่าใน§1.2:

มาตรฐานสากลนี้ไม่ได้ระบุ
- กลไกที่โปรแกรม C ถูกแปลงเพื่อใช้งานโดยระบบประมวลผลข้อมูล
- กลไกที่โปรแกรม C ถูกเรียกใช้โดยระบบประมวลผลข้อมูล
- กลไกที่ข้อมูลอินพุตถูกแปลงสำหรับใช้โดยโปรแกรม C

ดังนั้นการรักษาไฟล์ต้นฉบับจึงเป็นสิ่งที่คุณต้องการค้นหาในเอกสารประกอบคอมไพเลอร์ของคุณ


23
ฉันคิดว่าประโยคนั้นไม่ชัดเจนที่ดีที่สุด พจนานุกรม Merriam-Webster บอกว่าข้อความเป็นคำเดิมและรูปแบบของงานเขียนหรือพิมพ์หรือการทำงานที่มีข้อความเช่น ไฟล์ต้นฉบับนี้อยู่ภายใต้คำนิยามที่ชัดเจน คุณคิดว่าฉันควรยื่นรายงานข้อบกพร่องกับ Core Working Group หรือไม่?
James McNellis

15
โอ้; ฉันลืมอ่านเอกสารอ้างอิงทั้งหมด ฉันคิดว่าย่อหน้านั้นไม่ได้อยู่ในบริบทดังนั้นฉันจะไปอ่านทั้งหมดของ ISO / IEC 9899: 1990 และจะโพสต์ที่นี่อีกครั้งเมื่อฉันเข้าใจอย่างถ่องแท้
James McNellis

575

จากเดิมทีOverv @ Reddit


19
ดีที่สุด รูปแบบ BMP ภาพประกอบสเปค เคย
โทเบียส Kienzler

49
ดังนั้นข้อผิดพลาดของ OPs คือการใช้ png แทนที่จะเป็น bmp?
subsub

1
แรงบันดาลใจจากคำตอบที่สวยงามนี้ฉันตัดสินใจว่าฉันจะทำสิ่งที่คล้ายกับ brainf ***: blog.dreasgrech.com/2011/04/…
Andreas Grech


211

ของคุณ<และ >, (และ ), {และ }ดูเหมือนจะไม่ตรงกับดีมาก; ลองวาดมันดูดีกว่า


44
ในขณะที่ฉันไม่ได้ชื่นชมที่คุณเขียนด้วยลายมือของฉัน แต่นี่อาจเป็นปัญหาจริงและจะอธิบายข้อผิดพลาดที่ฉันได้รับเมื่อพยายามรวบรวมhelloworld.cpp ที่เปลี่ยนชื่อด้วย Visual C ++: "ข้อผิดพลาดร้ายแรง C1004: จุดสิ้นสุดที่ไม่คาดคิด พบไฟล์ "ฉันจะลองอีกครั้งและรายงานในไม่ช้า ขอบคุณ!
James McNellis

37
@James ตรวจสอบให้แน่ใจว่าคุณปิดการเพิ่มประสิทธิภาพ png ทั้งหมด มันทำให้การดีบักง่ายขึ้น
wilhelmtell

5
@James: "การสิ้นสุดไฟล์ที่ไม่คาดคิด" เกือบจะแน่นอนหมายความว่าเป็นของคุณ}ที่ทำให้เกิดปัญหา ลองเน้นไปที่การจับคู่กับ{
Carson63000

156

คุณสามารถลองใช้สคริปต์หลามต่อไปนี้ โปรดทราบว่าคุณจำเป็นต้องติดตั้ง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

110

คุณลืมที่จะใช้ Comic Sans เป็นแบบอักษรนั่นเป็นสาเหตุที่ทำให้เกิดข้อผิดพลาด


73
น่าเสียดายที่นี่เป็นแบบอักษรตัวเดียวที่มือฉันรองรับ มันคงจะเศร้ามากถ้าฉันไม่สามารถเขียนโปรแกรมใน C ++ เพราะสิ่งนี้ คุณคิดว่า Java จะสนับสนุนแบบอักษรนี้หรือไม่?
James McNellis

8
คุณจะต้องมี Comic Sans เมื่อคุณนึกถึงการวาดการ์ตูนอยู่แล้วดังนั้นคุณควรพิจารณายกระดับมืออย่างจริงจัง
sharptooth

8
C ++ ต้องมีการฝึกอบรมด้านการคัดลายมือเป็นเวลานานทุกปี หากคุณไม่มีเวลาลองใช้ Visual Basic หรือเพียงแค่รหัสเครื่องไบนารี (คุณเพียงแค่ต้องได้รับ 0 และ 1 แล้ว)
Frank Osterfeld

1
@Frank C ++ 0x §42.1 / 1 ระบุว่า "สตริงทั้งหมดต้องอยู่ใน Gothic"
Mateen Ulhaq

75

ฉันไม่เห็นบรรทัดใหม่หลังจากวงเล็บปีกกาสุดท้าย

ดังที่คุณทราบ: "หากไฟล์ต้นฉบับที่ไม่ว่างเปล่าไม่ได้จบลงด้วยอักขระขึ้นบรรทัดใหม่ ... พฤติกรรมนั้นไม่ได้กำหนด"


16
อืมม โชคดีที่กฎไร้สาระนี้ถูกลบไปใน C ++ 0x ที่กล่าวว่าหนึ่งจะจบไฟล์ดังกล่าวด้วยการขึ้นบรรทัดใหม่ได้อย่างไร ฉันคิดว่าฉันออกจากห้องเพียงพอในตอนท้ายของข้อความ (ถ้าคุณเน้นไฟล์ต้นฉบับคุณควรเห็นห้องพิเศษที่ฉันออกไป) ขอบคุณสำหรับเคล็ดลับแม้ว่า!
James McNellis

8
หากคุณมีช่องว่างไม่เพียงพอฉันสามารถลองรวบรวมมันในระบบของฉัน ฉันมีสี่จอภาพดังนั้นฉันสามารถลองรวบรวมจากซ้ายสุดของฉัน
คนดีบุก

74

โปรแกรมนี้ใช้ได้ - ฉันไม่พบข้อผิดพลาด

ฉันเดาว่าคุณมีไวรัสในเครื่องของคุณ จะเป็นการดีที่สุดถ้าคุณฟอร์แมตไดรฟ์และติดตั้งระบบปฏิบัติการใหม่

แจ้งให้เราทราบว่าวิธีนี้ใช้ได้ผลหรือหากคุณต้องการความช่วยเหลือในการติดตั้งใหม่

ฉันเกลียดไวรัส


17
ใช่ลองติดตั้ง Linux ฉันตำหนิ Windows สำหรับปัญหาของคุณ
Raedwald

62

ฉันพบว่ามันช่วยไม่ให้เขียนโค้ดของฉันบนกระจกมอนิเตอร์ด้วยปากกามาร์กเกอร์แม้ว่ามันจะดูดีเมื่อมันดำจริง ๆ หน้าจอเต็มเร็วเกินไปจากนั้นคนที่ให้การตรวจสอบที่สะอาดกับฉันโทรหาฉันทุกสัปดาห์

พนักงานของฉันสองคน (ฉันเป็นผู้จัดการ) กำลังเขมือบเพื่อซื้อคอมพิวเตอร์แผ่นสีแดงที่มีปุ่มจับ พวกเขาบอกว่าฉันไม่จำเป็นต้องมีเครื่องหมายและฉันสามารถทำความสะอาดหน้าจอด้วยตัวเองเมื่อมันเต็ม แต่ฉันต้องระวังเขย่าด้วยความระมัดระวัง ฉันคิดว่ามันเป็นวิธีที่ละเอียดอ่อน

นั่นเป็นเหตุผลที่ฉันจ้างคนฉลาด


2
Wacom Cintiq เหมาะสมกว่าสำหรับผู้จัดการ มันแพงและทำให้คุณรู้สึกว่าสำคัญจริงๆ นักออกแบบกราฟิกใด ๆ ใน บริษัท ของคุณจะมีสถานะต่ำกว่ามากและควรใช้มอนิเตอร์ EGA ภารโรงควรใช้จอภาพ CGA โปรแกรมเมอร์ควรใช้ขั้วขาวดำมือสอง
Steve314

7
ฉันมีจอภาพ "เหมือนชีวิต" เป็นเวลานาน มันช่างเป็นจริงที่คุณจะสาบานว่าสกรีนเซฟเวอร์ของปลาว่ายน้ำนั้นเป็นของจริงและชายนักประดาน้ำตัวน้อยดูเหมือนว่าเขากำลังว่ายน้ำ ฉันเอาแขนเปียกไปเรื่อย ๆ พยายามเอาหีบสมบัติจากด้านล่างมันเป็นของจริง ปัญหาเดียวคือโปรแกรมรักษาหน้าจอเปิดอยู่ตลอดเวลาและเสียงฟองที่เหมือนจริงทำให้ยากต่อการได้ยิน โอ้และพวกเขากล่าวว่าสำหรับการบำรุงรักษาฉันต้องโรยสิ่งที่ด้านบนของจอภาพทุกวันมิฉะนั้นโปรแกรมรักษาหน้าจอจะหยุดทำงาน มันทำครั้งเดียวแล้วก็เด็กชายกลิ่นสองวันต่อมาเป็นจริงมาก
Tin Man

59

File format not recognizedคุณต้องจัดรูปแบบไฟล์ของคุณอย่างถูกต้อง นั่นหมายถึงการใช้สีและแบบอักษรที่ถูกต้องสำหรับรหัสของคุณ ดูเอกสารประกอบที่เฉพาะเจาะจงสำหรับแต่ละคอมไพเลอร์เป็นสีเหล่านี้แตกต่างกันระหว่างคอมไพเลอร์;)


14
โอ้, มันสมเหตุสมผลแล้ว ... ฉันมีกล่องดินสอสี 96 กล่อง, ดังนั้นฉันแน่ใจว่าฉันมีสีพื้นหน้าที่ถูกต้อง พรุ่งนี้ฉันจะหยิบกระดาษก่อสร้างสีแล้วลองใช้กระดาษสีอื่น
James McNellis

3
เพื่อความปลอดภัยคุณควรได้รับดินสอสีและสีน้ำมันที่ดีกว่า เป็นความจริงที่รู้จักกันดีว่า C ++ หมายถึงเป็นภาษาที่ยากมากในการจัดรูปแบบอย่างถูกต้อง
helloworld922

ใช่แล้วอย่าลืมใช้เครื่องหมายเน้นสี
sharptooth

6
@sharptooth - การเน้นไวยากรณ์เป็นคุณลักษณะ IDE - คุณไม่ได้ตั้งใจจะทำด้วยมือ ดังนั้นให้แน่ใจว่าคุณได้รับแขนหุ่นยนต์ไปกับเครื่องหมายเน้นที่
Steve314

56

คุณลืมโปรเซสเซอร์ล่วงหน้า ลองสิ่งนี้:

pngtopnm helloworld.png | ocrad | g++ -x 'c++' -

8
Oh! ฉันคิดว่า preprocessor นั้นมาพร้อมกับคอมไพเลอร์! ฉันจะพยายามหา preprocessor ที่ทำงานบนแล็ปท็อป Windows ของฉัน
James McNellis

3
@James McNellis: ตัวประมวลผลล่วงหน้าไม่ใช่โปรแกรมมันเป็นสิ่งฮาร์ดแวร์ที่ดูเหมือนเครื่องหมายไฮไลต์ - คุณเลื่อนมันไปที่ข้อความของคุณและจะได้รับการประมวลผลล่วงหน้า
sharptooth

49

คุณเขียนโปรแกรมแล้วสแกนลงในคอมพิวเตอร์หรือไม่ นั่นคือสิ่งที่บอกเป็นนัยโดย "helloworld.png" หากเป็นกรณีนี้คุณต้องระวังว่ามาตรฐาน C ++ (แม้ในรุ่นใหม่ล่าสุด) ไม่จำเป็นต้องมีการรู้จำอักขระด้วยแสงและน่าเสียดายที่ไม่รวมอยู่ในคุณสมบัติเสริมในคอมไพเลอร์ปัจจุบัน

คุณอาจต้องการเปลี่ยนกราฟิกเป็นรูปแบบข้อความ อาจใช้โปรแกรมแก้ไขข้อความธรรมดา การใช้โปรแกรมประมวลผลคำในขณะที่ความสามารถในการสร้างงานพิมพ์ออกมาน่าจะทำให้เกิดข้อผิดพลาดเดียวกับที่คุณได้รับขณะพยายามสแกน

หากคุณเป็นนักผจญภัยอย่างแท้จริงคุณอาจลองเขียนโค้ดลงในโปรแกรมประมวลผลคำ พิมพ์โดยใช้แบบอักษรเช่นOCR-A OCR-Aจากนั้นนำงานพิมพ์ของคุณออกมาและสแกนกลับเข้ามาการสแกนนั้นสามารถเรียกใช้ผ่านแพ็คเกจ OCR ของบุคคลที่สามเพื่อสร้างรูปแบบข้อความ แบบฟอร์มข้อความอาจถูกคอมไพล์โดยใช้หนึ่งในคอมไพเลอร์มาตรฐานจำนวนมาก

อย่างไรก็ตามระวังค่าใช้จ่ายที่ดีของกระดาษที่จะเกิดขึ้นในช่วงการตรวจแก้จุดบกพร่อง


The Chicken & Egg Dilemma: เป็นไปได้ไหมที่จะเขียนโค้ด C ++ สำหรับซอฟต์แวร์ OCR และคอมไพล์โดยไม่มี OCR?
jweyrich

5
ดีคุณใช้ชุดประกอบสำหรับ OCR ดั้งเดิม
Kevin Lacquement

@jweyrich - ฉันคิดว่าคุณจะต้องใช้ C ++ / OCR bootstrapped ของคุณด้วย asm / OCR toolchain ก่อน
Michael Burr

2
โอ้ ASM ใช่! ASM ในบัตรเจาะ
jweyrich

46

วาดรวมด้านล่างเพื่อให้รวบรวม:

#include <ChuckNorris>

ฉันได้ยินมาว่าเขาสามารถรวบรวมข้อผิดพลาดทางไวยากรณ์ ...


46
#include <JonSkeet>ผมเองชอบ
Icode4food

40

น่าเสียดายที่คุณได้เลือกคอมไพเลอร์สามตัวที่สนับสนุนหลายภาษาไม่ใช่แค่ C ++ พวกเขาทั้งหมดต้องเดาภาษาการเขียนโปรแกรมที่คุณใช้ อย่างที่คุณทราบอยู่แล้วว่ารูปแบบ PNG นั้นเหมาะสำหรับภาษาการเขียนโปรแกรมทั้งหมดไม่ใช่แค่ C ++

โดยปกติคอมไพเลอร์สามารถคิดภาษาเอง ตัวอย่างเช่นหาก PNG ถูกวาดด้วยดินสอสีอย่างเห็นได้ชัดคอมไพเลอร์จะรู้ว่ามันมี Visual Basic หากดูเหมือนว่ามันจะถูกวาดด้วยดินสอกลมันง่ายต่อการจดจำวิศวกรในที่ทำงานเขียนรหัส FORTRAN

ขั้นตอนที่สองนี้ไม่ได้ช่วยคอมไพเลอร์ในกรณีนี้ C และ C ++ #includeเพียงแค่มองที่คล้ายกันเกินไปลงไป ดังนั้นคุณต้องช่วยผู้แปลตัดสินใจว่าภาษานั้นคืออะไร ตอนนี้คุณสามารถใช้วิธีการที่ไม่ได้มาตรฐาน ตัวอย่างเช่นคอมไพเลอร์ Visual Studio ยอมรับอาร์กิวเมนต์บรรทัดคำสั่ง/ TC และ / TPหรือคุณสามารถใช้ตัวเลือก "คอมไพล์เป็น: C ++" ในไฟล์โครงการ GCC และ CLang มีกลไกของตัวเองซึ่งฉันไม่รู้

ดังนั้นฉันขอแนะนำให้ใช้วิธีมาตรฐานแทนเพื่อบอกคอมไพเลอร์ของคุณว่ารหัสต่อไปนี้อยู่ใน C ++ ดังที่คุณได้ค้นพบในตอนนี้คอมไพเลอร์ C ++ เป็นคนพิถีพิถันในสิ่งที่พวกเขายอมรับ ดังนั้นวิธีมาตรฐานในการระบุ C ++ คือโดยโปรแกรมเมอร์ข่มขู่เพิ่มรหัส C ++ ของพวกเขา ตัวอย่างเช่นบรรทัดต่อไปนี้จะอธิบายให้คอมไพเลอร์ของคุณทราบว่าสิ่งต่อไปนี้คือ C ++ (และเขาควรคอมไพล์โดยไม่มีข้อร้องเรียน)

// To the compiler: I know where you are installed. No funny games, capice?

10
ฉันคิดว่า#pragmaวิธีที่ถูกต้องในการ "รับข้อความ" ไปยังคอมไพเลอร์?
เลฟบิชอป

33

ลองอันนี้:

คุณเห็นไดโนเสาร์ในกระสวยอวกาศหรือไม่?


4
ฉันคิดว่ามีการพิมพ์ผิด - ควรendl(L) ไม่ใช่end1(หนึ่ง) แต่ +1 ทำได้ดีมาก!
รูปี

44
ฉันได้จ้องมองที่นี่เป็นเวลาสามชั่วโมง แต่ฉันยังไม่เห็นไดโนเสาร์หรือกระสวยอวกาศ :-(
oosterwal

32

คอมไพเลอร์ของคุณตั้งอยู่ในโหมดผู้เชี่ยวชาญหรือไม่! ถ้าใช่มันไม่ควรรวบรวม คอมไพเลอร์สมัยใหม่เบื่อ "Hello World!"


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 _ |
_|

ซึ่งเป็นเรื่องที่ค่อนข้างดี


4
ว้าว OCR ได้รับการปรับปรุงตั้งแต่ฉันพยายามสแกนลายมือของฉัน (ใช้เวลาเขียนหลายชั่วโมงเหมือนกัน)
James P.

40
ฉันคิดว่าเราต้องเพิ่มแท็ก Perl
MSalters

26

helloworld.png: ไม่รู้จักไฟล์: ไม่รู้จักรูปแบบไฟล์

เห็นได้ชัดว่าคุณควรฟอร์แมตฮาร์ดไดรฟ์ของคุณ

จริงๆแล้วข้อผิดพลาดเหล่านี้ไม่ใช่เรื่องยากที่จะอ่าน


20

ฉันแปลงโปรแกรมของคุณจาก PNG เป็น ASCII แต่มันยังไม่ได้รวบรวม สำหรับข้อมูลของคุณฉันลองด้วยความกว้างของบรรทัด 100 และ 250 ตัวอักษร แต่ทั้งคู่ให้ผลลัพธ์ที่คล้ายคลึงกัน

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

8
คุณควรใช้80 หรือ 72 คอลัมน์แทน
Tobias Kienzler

16

ปัญหาแรกคือคุณพยายามคืนค่าที่ไม่ถูกต้องในตอนท้ายของฟังก์ชั่นหลัก มาตรฐาน 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 ทำงานอย่างเต็มที่ในขณะที่สามารถเห็นได้จากการสาธิตที่นี่


3
ฉันมีอาจารย์ย้อนกลับไปเมื่อใครจะถอดคะแนนการบ้านหรือการสอบของคุณถ้าคุณใส่เครื่องหมายสแลชเป็นเลขศูนย์เพราะศูนย์ไม่ใช่เซตว่าง เขาจะขอบคุณคำตอบนี้
Michael Burr

15

ฟอนต์ของคุณแย่ขนาดนี้ตัวแยกวิเคราะห์จะสามารถอ่านได้อย่างไร เรียนการประดิษฐ์ตัวอักษร


13

คอมไพเลอร์ของคุณจะคาดหวังว่าASCIIแต่โปรแกรมที่เห็นได้ชัดเขียนโดยใช้EBCDIC


ล่าสุดฉันได้ยินว่า C ++ ไม่ได้ระบุว่าจะต้องเขียนโปรแกรมใน ASCII, UTF-8 หรืออย่างอื่น
Adrian Ratnapala

8

คุณกำลังพยายามรวบรวมภาพ

พิมพ์สิ่งที่คุณเขียนด้วยมือลงในเอกสารชื่อ main.cpp เรียกใช้ไฟล์นั้นผ่านคอมไพเลอร์ของคุณจากนั้นเรียกใช้ไฟล์เอาต์พุต


23
ตรวจสอบวันที่บนพีซีของคุณ
James P.

14
ฮ่าฮ่า แต่ในที่สุดฉันก็พบวิธีง่าย ๆ ที่ฉันสามารถตอบได้!
Cody Grey

10
นี่มันโง่ เราทุกคนรู้ว่าคอมไพเลอร์จะปรับช่องว่างออกให้เหลือเพียงพื้นที่สีดำที่ถูกบีบอัดอย่างหนักเท่านั้นซึ่งเป็นพื้นที่ทั้งหมดและจะบีบอัดลงไปเป็นไบนารี 1 ซึ่งจะถูกส่งกลับเป็นข้อผิดพลาด รหัสจำเป็นต้องเขียนโดยใช้ white-out ซึ่งจะคอมไพล์เป็น 0 และไม่ส่งคืนข้อผิดพลาด
Tin Man

7

คุณต้องระบุความแม่นยำของการส่งออกของคุณนำหน้าด้วยลำไส้ใหญ่ทันทีก่อนที่จะรั้งปิดสุดท้าย เนื่องจากเอาต์พุตไม่ใช่ตัวเลขความแม่นยำจึงเป็นศูนย์ดังนั้นคุณจึงต้องใช้

: 0}




5

ปัญหาอยู่ที่คำจำกัดความของไวยากรณ์ลองใช้ไม้บรรทัดและวงเวียนสำหรับคำอธิบายแบบคลาสสิกมากขึ้น!

ไชโย


5

ลองสลับอินเทอร์เฟซอินพุต C ++ คาดว่าจะต่อคีย์บอร์ดเข้ากับคอมพิวเตอร์ของคุณไม่ใช่สแกนเนอร์ อาจมีปัญหาความขัดแย้งอุปกรณ์ต่อพ่วงที่นี่ ฉันไม่ได้เช็คอินมาตรฐาน ISO ถ้าจำเป็นต้องใช้อินเทอร์เฟซสำหรับแป้นพิมพ์ในการป้อนข้อมูล แต่นั่นเป็นความจริงสำหรับคอมไพเลอร์ทั้งหมดที่ฉันเคยใช้ แต่ตอนนี้อินพุตสแกนเนอร์อาจมีให้บริการใน C99 และในกรณีนี้โปรแกรมของคุณควรใช้งานได้จริง ถ้าไม่ใช่คุณจะต้องรอการปล่อยตัวมาตรฐานครั้งต่อไปและอัปเกรดคอมไพเลอร์


5

คุณสามารถลองสีที่แตกต่างกันสำหรับวงเล็บบางทีสีเขียวหรือสีแดงจะช่วย? ฉันคิดว่าคอมไพเลอร์ของคุณไม่สามารถระบุหมึกดำได้: P


5

ฉันเป็นคนเดียวที่ไม่สามารถจดจำตัวละครระหว่าง 'return' และ semicolon ได้หรือไม่? อาจเป็นได้!


4
มันเป็นตัวอักษรพิมพ์ใหญ่ O ที่มีบรรทัดพิเศษที่เราเรียกว่า "diameter" ซึ่งบอกให้คอมไพเลอร์ใช้ Midpoint Circle Algorithm อย่างเห็นได้ชัด ฉันคิดว่าคุณควรตรวจตา
Mateen Ulhaq
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.