Bagaimana cara mengkompilasi kode sumber C ++ (kesalahan "iostream.h not found")?

20

Saya tidak ingin membahas tentang C ++ atau bahasa pemrograman apa pun! Saya hanya ingin tahu apa yang saya lakukan salah dengan linux ubuntu tentang kompilasi helloworld.cpp!

Saya belajar C ++ jadi langkah saya adalah:

buka hello.cpp dalam vim dan tulis ini

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

Jadi, setelah itu saya coba di terminal ini

g++ hello.cpp

DAN outputnya

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

Apa yang Anda sarankan? Adakah panduan langkah demi langkah yang bermanfaat bagi saya? Terima kasih!

Gabriel
sumber
2
Jika ada orang yang mempertimbangkan memilih untuk menutup pertanyaan ini sebagai di luar topik: Ini benar-benar masalah platform-spesifik, karena kompiler C ++ paling populer untuk Windows (Microsoft Visual C ++) menerima sintaks ini, tetapi kebanyakan kompiler lain (termasuk g++di Ubuntu) jangan menerimanya.
Eliah Kagan
#include <iostream> menggunakan namespace std; int main () {cout << "Hello World"; return 0; } ini bisa bekerja ...

Jawaban:

43

Anda harus menggunakan #include <iostream>, bukan iostream.h; yang h bentuk sangat tua dan usang sejak tahun.

Anda dapat membaca lebih dari yang mungkin ingin Anda ketahui di formulir .h vs non- .h di sini: http://members.gamedev.net/sicrane/articles/iostream.html

(Plus, Anda harus menulis std::coutatau memiliki baris using namespace std;kalau tidak kesalahan Anda berikutnya adalah tentang kompiler tidak menemukan definisi untuk cout.)

Riccardo Murri
sumber
4
@ gabriel C ++ memiliki sejarah panjang, sejak pertengahan 1980-an. Sekarang ada beberapa standar yang diterbitkan, yang terbaru (C ++ 11) telah dirilis awal tahun ini, dan yang sebelumnya (yang diikuti semua kompiler hari ini) tanggal kembali ke 2003 (C ++ 03). Panduan yang Anda tautkan tampaknya jauh lebih tua dari itu, jika dilihat dari perangkat lunak kompiler yang disebutkan (menurut Wikipedia, Borland Turbo C ++ dihentikan pada 1994). Jika Anda memilih tutorial mengikuti standar C ++ 03, kode Anda akan berfungsi pada distribusi Linux apa pun yang tersedia saat ini.
Riccardo Murri
1
@ gabriel Sepertinya pertanyaan Anda telah dijawab di StackOverflow: stackoverflow.com/questions/909323/…
Riccardo Murri
1
Anda mungkin juga perlu: sudo apt-get install build-essential
david6
2
@ david6: Saya telah menginstal build-essential tetapi tidak ada iostream.hdi sistem saya. Sebenarnya, file header C ++ diinstal oleh libstdc ++ - dev , yang diperlukan oleh paket kompilasi C ++ g ++ , yang pada gilirannya diperlukan oleh build-essential . Jadi, tidak, Anda tidak perlu build-essential untuk mengkompilasi program C ++ sederhana; menginstal g++paket sudah cukup.
Riccardo Murri
1
Untuk mulai coutbekerja tanpa std::awalan, using std::cout;lebih disukai using namespace std;. Bahkan beberapa usingpernyataan (tanpa namespace) umumnya lebih baik, karena Anda tidak membawa pengidentifikasi dari stdnamespace yang tidak Anda inginkan dan mungkin bertentangan dengan nama-nama dalam program Anda sendiri.
Eliah Kagan
15

Anda harus berubah iostream.hmenjadi iostream. Saya juga mendapatkan kesalahan yang sama seperti yang Anda dapatkan, tetapi ketika saya berubah iostream.hmenjadi hanya iostream, itu berfungsi dengan baik. Mungkin itu akan berhasil untuk Anda juga.

Dengan kata lain, ubah baris yang mengatakan:

#include <iostream.h>

Buatlah ini mengatakan ini sebagai gantinya:

#include <iostream>

File header pustaka standar C ++, sebagaimana didefinisikan dalam standar, tidak memiliki .hekstensi.

Seperti yang disebutkan jawaban Riccardo Murri , Anda juga perlu memanggil coutnama lengkapnya std::cout, atau memiliki salah satu dari dua baris ini (lebih disukai di bawah #includearahan Anda tetapi di atas kode Anda yang lain):

using namespace std;
using std::cout;

Cara kedua dianggap lebih disukai, terutama untuk proyek pemrograman yang serius, karena hanya berpengaruh std::cout, daripada membawa semua nama di stdnamespace (beberapa di antaranya mungkin berpotensi mengganggu nama yang digunakan dalam program Anda).

Dhruv kaushik
sumber
Jawaban yang bagus Dalam menjawab pertanyaan @ gabriel, Anda telah menyelesaikan beberapa kebingungan sisi yang saya alami selama bertahun-tahun.
isomorfisma