Làm cách nào để biên dịch mã nguồn C ++ (không tìm thấy lỗi iostream.h)


20

Tôi không muốn thảo luận về C ++ hoặc bất kỳ ngôn ngữ lập trình nào! Tôi chỉ muốn biết tôi đang làm gì với linux ub Ubuntu về việc biên dịch helloworld.cpp!

Tôi đang học C ++ nên các bước của tôi là:

mở hello.cpp trong vim và viết cái này

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

Vì vậy, sau đó tôi đã thử trong thiết bị đầu cuối này

g++ hello.cpp

VÀ đầu ra là

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

Bạn có đề nghị gì? Bất kỳ hướng dẫn từng bước hữu ích cho tôi? Cảm ơn!


2
Trong trường hợp bất cứ ai đang xem xét bỏ phiếu để đóng câu hỏi này ngoài chủ đề: Đây thực sự là một vấn đề cụ thể về nền tảng, bởi vì trình biên dịch C ++ phổ biến nhất cho Windows (Microsoft Visual C ++) chấp nhận cú pháp này, nhưng hầu hết các trình biên dịch khác (kể cả g++trong Ubuntu) không chấp nhận nó
Eliah Kagan

#include <iostream> bằng cách sử dụng không gian tên std; int main () {cout << "Xin chào thế giới"; trả về 0; } cái này có thể hoạt động ...

Câu trả lời:


43

Bạn nên sử dụng #include <iostream>, không iostream.h; các .h hình thức là rất cũ và bị phản đối từ những năm.

Bạn có thể đọc nhiều hơn bạn có thể muốn biết trên các biểu mẫu .h vs non- .h tại đây: http://members.gamedev.net/sicrane/articles/iostream.html

(Ngoài ra, bạn nên viết std::couthoặc có một dòng using namespace std;nếu không lỗi tiếp theo của bạn sẽ là về trình biên dịch không tìm thấy định nghĩa cho cout.)


4
@gabriel C ++ có một lịch sử lâu dài, có từ giữa năm 1980. Hiện tại có một số tiêu chuẩn được công bố, trong đó tiêu chuẩn mới nhất (C ++ 11) đã được phát hành vào đầu năm nay và tiêu chuẩn trước đó (tiêu chuẩn mà tất cả các trình biên dịch tuân theo ngày hôm nay) có từ năm 2003 (C ++ 03). Hướng dẫn mà bạn liên kết dường như cũ hơn nhiều so với điều đó, đánh giá từ phần mềm biên dịch mà nó đề cập (theo Wikipedia, Borland Turbo C ++ đã bị ngừng vào năm 1994). Nếu bạn chọn một hướng dẫn theo tiêu chuẩn C ++ 03, mã của bạn sẽ hoạt động trên mọi bản phân phối Linux hiện có.
Riccardo Murri

1
@gabriel Có vẻ như câu hỏi của bạn đã được trả lời trên StackOverflow: stackoverflow.com/questions/909323/ chủ
Riccardo Murri

1
Bạn cũng có thể cần: sudo apt-get install build-
Essential

2
@ david6: Tôi đã cài đặt bản dựng nhưng không có iostream.htrên hệ thống của tôi. Trên thực tế, các tệp tiêu đề C ++ được cài đặt bởi libstdc ++ - dev , được yêu cầu bởi gói trình biên dịch C ++ g ++ , do đó được yêu cầu bởi build-Essential . Vì vậy, không, bạn không cần xây dựng để biên dịch các chương trình C ++ đơn giản; Cài đặt g++gói là đủ.
Riccardo Murri

1
Để chỉ coutlàm việc mà không có std::tiền tố, using std::cout;tốt hơn là nên using namespace std;. Thậm chí nhiều usingcâu lệnh (không có namespace) thường tốt hơn, vì bạn không mang các số nhận dạng từ stdkhông gian tên mà bạn không muốn và có thể xung đột với các tên trong chương trình của riêng bạn.
Eliah Kagan

15

Bạn nên đổi iostream.hsang iostream. Tôi cũng đã nhận được lỗi tương tự như bạn đang nhận được, nhưng khi tôi đổi iostream.hthành chỉ iostream, nó hoạt động đúng. Có lẽ nó sẽ làm việc cho bạn là tốt.

Nói cách khác, thay đổi dòng có nội dung:

#include <iostream.h>

Làm cho nó nói điều này thay vào đó:

#include <iostream>

Các tệp tiêu đề thư viện chuẩn C ++, như được định nghĩa trong tiêu chuẩn, không có .hphần mở rộng.

Như câu trả lời của Riccardo Murri đã đề cập , bạn cũng sẽ cần gọi coutbằng tên đủ điều kiện của nó std::couthoặc có một trong hai dòng này (tốt nhất là dưới các #includechỉ thị của bạn nhưng bên trên mã khác của bạn):

using namespace std;
using std::cout;

Cách thứ hai được coi là thích hợp hơn, đặc biệt đối với các dự án lập trình nghiêm túc, vì nó chỉ ảnh hưởng std::cout, thay vì mang tất cả các tên trong stdkhông gian tên (một số có thể có khả năng can thiệp vào các tên được sử dụng trong chương trình của bạn).


Câu trả lời chính xác. Khi trả lời câu hỏi của @ gabriel, bạn đã giải quyết được một vài nhầm lẫn bên tôi đã có trong nhiều năm.
đẳng cấu
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.