Como compilar o código-fonte C ++ (erro "iostream.h não encontrado")?


20

Eu não quero discutir sobre C ++ ou qualquer linguagem de programação! Eu só quero saber o que estou fazendo de errado com o linux ubuntu sobre a compilação do helloworld.cpp!

Estou aprendendo C ++, então minhas etapas são:

abra o hello.cpp no ​​vim e escreva isto

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

Então, depois que eu tentei no terminal isso

g++ hello.cpp

E a saída é

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

O que você sugere? Qualquer guia passo a passo útil para mim? Obrigado!


2
Caso alguém esteja pensando em votar para encerrar esta pergunta como fora de tópico: esse é realmente um problema específico da plataforma, porque o compilador C ++ mais popular para Windows (Microsoft Visual C ++) aceita essa sintaxe, mas a maioria dos outros compiladores (incluindo o g++Ubuntu) não aceite.
Eliah Kagan 26/09/12

#include <iostream> usando o namespace std; int main () {cout << "Olá mundo"; retornar 0; } isso pode funcionar ...

Respostas:


43

Você deve usar #include <iostream>, não iostream.h; o formulário .h é muito antigo e está obsoleto desde anos.

Você pode ler mais do que você provavelmente vai querer saber sobre o .h vs não .h formas aqui: http://members.gamedev.net/sicrane/articles/iostream.html

(Além disso, você deve escrever std::coutou ter uma linha, using namespace std;caso contrário, seu próximo erro será sobre o compilador não encontrar uma definição para cout.)


4
@gabriel C ++ tem uma longa história, que remonta a meados de 1980. Agora existem vários padrões publicados, o mais recente (C ++ 11) foi lançado no início deste ano, e o anterior (o que todos os compiladores seguem hoje) data de 2003 (C ++ 03). O guia que você vinculou parece ser muito mais antigo que isso, a julgar pelo software de compilação mencionado (de acordo com a Wikipedia, o Borland Turbo C ++ foi descontinuado em 1994). Se você escolher um tutorial seguindo o padrão C ++ 03, seu código funcionará em qualquer distribuição Linux disponível hoje.
Riccardo Murri

11
Looks @gabriel como a sua pergunta já foi respondida em StackOverflow: stackoverflow.com/questions/909323/...
Riccardo Murri

11
Você também pode precisar: sudo apt-get install build-essential
david6 4/12

2
@ david6: Eu tenho o build-essential instalado, mas não existe iostream.hno meu sistema. Na verdade, os arquivos de cabeçalho C ++ são instalados pelo libstdc ++ - dev , que é requerido pelo pacote do compilador C ++ g ++ , que por sua vez é requerido pelo essencial da construção . Portanto, não, você não precisa do build-essential para compilar programas C ++ simples; instalar o g++pacote é suficiente.
Riccardo Murri

11
Para começar couta trabalhar sem o std::prefixo, using std::cout;é preferível using namespace std;. Mesmo várias usinginstruções (sem namespace) geralmente são melhores, pois você não traz identificadores do stdespaço para nome que você não deseja e pode entrar em conflito com os nomes em seu próprio programa.
Eliah Kagan 26/09/12

15

Você deve mudar iostream.hpara iostream. Eu também estava recebendo o mesmo erro que você, mas quando mudei iostream.hpara apenas iostream, funcionou corretamente. Talvez isso funcione para você também.

Em outras palavras, altere a linha que diz:

#include <iostream.h>

Em vez disso, faça isso:

#include <iostream>

Os arquivos de cabeçalho da biblioteca padrão C ++, conforme definido no padrão, não possuem .hextensões.

Como mencionado na resposta de Riccardo Murri , você também precisará chamar coutpelo nome totalmente qualificado std::coutou ter uma dessas duas linhas (de preferência abaixo das #includediretivas, mas acima do outro código):

using namespace std;
using std::cout;

A segunda maneira é considerada preferível, especialmente para projetos de programação sérios, pois afeta apenas std::cout, em vez de trazer todos os nomes no stdespaço para nome (alguns dos quais podem potencialmente interferir nos nomes usados ​​no seu programa).


Ótima resposta. Ao responder à pergunta de @ gabriel, você resolveu algumas confusões que tive durante anos.
Isomorphismes
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.