วิธีการรวบรวมซอร์สโค้ด C ++ (ข้อผิดพลาด“ ไม่พบ iostream.h”)


20

ฉันไม่ต้องการที่จะพูดคุยเกี่ยวกับ C ++ หรือภาษาการเขียนโปรแกรมใด ๆ ! ฉันแค่อยากจะรู้ว่าสิ่งที่ฉันทำผิดกับลินุกซ์อูบุนตูเกี่ยวกับการรวบรวม helloworld.cpp!

ฉันกำลังเรียนรู้ C ++ ดังนั้นขั้นตอนของฉันคือ:

เปิด hello.cpp เป็นกลุ่มและเขียนสิ่งนี้

#include <iostream.h>
int main()
{
    cout << "Hello World!\n";`
    return 0;
}

ดังนั้นหลังจากนั้นฉันลองในเทอร์มินัลนี้

g++ hello.cpp

และผลลัพธ์ก็คือ

hello.cpp:1:22: fatal error: iostream.h: No such file or directory
compilation terminated.

คุณแนะนำอะไร? มีประโยชน์ทีละขั้นตอนสำหรับฉันหรือไม่ขอบคุณ!


2
ในกรณีที่ทุกคนกำลังพิจารณาโหวตให้ปิดคำถามนี้เป็นหัวข้อนอก: นี่เป็นปัญหาเฉพาะแพลตฟอร์มเนื่องจากคอมไพเลอร์ C ++ ที่นิยมมากที่สุดสำหรับ Windows (Microsoft Visual C ++) ยอมรับไวยากรณ์นี้ แต่คอมไพเลอร์อื่น ๆ ส่วนใหญ่ (รวมถึงg++Ubuntu) ไม่ยอมรับมัน
Eliah Kagan

#include <iostream> ใช้ namespace std; int main () {ศาล << "Hello World"; กลับ 0 } สิ่งนี้สามารถใช้งานได้ ...

คำตอบ:


43

คุณควรใช้#include <iostream>ไม่ใช่iostream.h; .hรูปแบบเป็นอย่างมากเก่าและเลิกใช้ตั้งแต่ปีที่ผ่านมา

คุณสามารถอ่านมากกว่าที่คุณอยากรู้ในแบบฟอร์ม. h vs non- .hที่นี่: http://members.gamedev.net/sicrane/articles/iostream.html

(นอกจากนี้คุณควรเขียนstd::coutหรือมีบรรทัดusing namespace std;มิฉะนั้นข้อผิดพลาดต่อไปของคุณจะเกี่ยวกับคอมไพเลอร์ไม่พบคำจำกัดความสำหรับcout)


4
@gabriel C ++ มีประวัติยาวนานย้อนหลังไปถึงกลางทศวรรษ 1980 ขณะนี้มีมาตรฐานที่เผยแพร่หลายฉบับซึ่งล่าสุด (C ++ 11) ได้รับการเผยแพร่เมื่อต้นปีนี้และมาตรฐานก่อนหน้านี้ (มาตรฐานที่คอมไพเลอร์ทั้งหมดติดตามในวันนี้) ย้อนหลังไปถึงปี 2003 (C ++ 03) คู่มือที่คุณเชื่อมโยงดูเหมือนจะเก่ากว่านั้นมากเมื่อพิจารณาจากซอฟต์แวร์คอมไพเลอร์ที่กล่าวถึง (ตาม Wikipedia, Borland Turbo C ++ ถูกยกเลิกในปี 1994) หากคุณเลือกบทช่วยสอนตามมาตรฐาน C ++ 03 รหัสของคุณจะทำงานกับการแจกจ่าย Linux ที่มีอยู่ในปัจจุบัน
Riccardo Murri

1
@gabriel ดูเหมือนว่าคำถามของคุณได้รับคำตอบแล้วใน StackOverflow: stackoverflow.com/questions/909323/…
Riccardo Murri

1
นอกจากนี้คุณยังอาจต้อง: sudo apt-get install สร้างจำเป็น
david6

2
@ david6: ฉันได้ติดตั้งสิ่งจำเป็นสำหรับการติดตั้งแล้ว แต่ไม่มีiostream.hในระบบของฉัน อันที่จริง, C ++ ไฟล์ส่วนหัวมีการติดตั้งโดยlibstdc ++ - devซึ่งเป็นสิ่งจำเป็นโดย c ++ แพคเกจคอมไพเลอร์กรัม ++ซึ่งจะเป็นสิ่งจำเป็นโดยสร้างสิ่งจำเป็น ดังนั้นไม่คุณไม่จำเป็นต้องbuild-essentialเพื่อคอมไพล์โปรแกรม C ++ อย่างง่าย การติดตั้งg++แพคเกจก็เพียงพอแล้ว
Riccardo Murri

1
สำหรับเพียงการcoutทำงานโดยไม่มีstd::คำนำหน้าusing std::cout;เป็นที่using namespace std;ต้องการ แม้จะมีหลายusingงบ (ไม่รวมnamespace) ก็ดีกว่าเนื่องจากคุณไม่ได้นำตัวระบุจากstdเนมสเปซที่คุณไม่ต้องการและอาจขัดแย้งกับชื่อในโปรแกรมของคุณเอง
Eliah Kagan

15

คุณควรเปลี่ยนไปiostream.h iostreamฉันยังได้รับข้อผิดพลาดเช่นเดียวกับที่คุณได้รับ แต่เมื่อฉันเปลี่ยนiostream.hเป็นเพียงiostreamมันทำงานได้อย่างถูกต้อง บางทีมันก็ใช้ได้ผลสำหรับคุณเช่นกัน

กล่าวอีกนัยหนึ่งเปลี่ยนบรรทัดที่ระบุว่า:

#include <iostream.h>

ให้พูดแบบนี้แทน:

#include <iostream>

ไฟล์ส่วนหัวของไลบรารีมาตรฐาน C ++ ตามที่กำหนดในมาตรฐานไม่มี.hส่วนขยาย

ตามคำตอบของ Riccardo Murriคุณจะต้องโทรcoutตามชื่อที่ผ่านการรับรองstd::coutหรือมีหนึ่งในสองบรรทัดนี้ (ควรอยู่ใต้#includeคำสั่งของคุณแต่เหนือรหัสอื่น ๆ ของคุณ):

using namespace std;
using std::cout;

วิธีที่สองได้รับการพิจารณาว่าดีกว่าโดยเฉพาะอย่างยิ่งสำหรับโครงการการเขียนโปรแกรมที่ร้ายแรงเนื่องจากจะส่งผลกระทบต่อเท่านั้นstd::coutแทนที่จะนำชื่อทั้งหมดในstdเนมสเปซ (บางส่วนอาจรบกวนชื่อที่ใช้ในโปรแกรมของคุณ)


คำตอบที่ดี ในการตอบคำถามของ @ gabriel คุณได้แก้ไขความสับสนด้านสองอย่างที่ฉันมีมานานหลายปี
isomorphismes
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.