2011-12-22 26 views
11

Necesito compilar código en mi sistema Linux. Este es un código simple y no sé lo que está mal:No se puede compilar C++ con gcc

tengo este código y no puedo compilarlo:

#include <iostream> 
#include <string> 
using namespace std; 

int main() 
{ 
    string char1, char2, char3, char4, char5, char6; 
    cout<<"Hello this is your standard True and False quiz"<<endl; 
    cout<<"Please enter 'T' or 'F'"<<endl; 
    cout<<"No#1 George Washington invented the toilet?"<<endl; 
    cin>>char1; 
    if (char1 != "T" || "F") 
    { 
     cout<<"You entered an incorrect character please reenter True of False"<<endl; 
     cin>>char1; 
    } 
    if (char1 != "T" || "F") 
    { 
     cout<<"You entered an incorrect character please reenter True of False"<<endl; 
     cin>>char1; 
    } 
    if (char1 == "T") 
    { 
     cout<<"You entered the incorrect answer. The answer is False"<<endl; 
    } 
    cout<<"No#2 The Squareroot of 3136 is 56?"<<endl;  
    cin>>char2; 
    if (char2 != "T" || "F") 
    { 
     cout<<"You entered an incorrect character please reenter True of False"<<endl; 
     cin>>char2; 
    } 
    if (char2 != "T" || "F") 
    { 
     cout<<"You entered an incorrect character please reenter True of False"<<endl; 
     cin>>char2; 
    } 
    if (char2 == "F") 
    { 
     cout<<"You entered the incorrect answer. The answer is True"<<endl; 
    } 
    cout<<"No#3 
    system("PAUSE"); 
    return 0; 
} 

Cuando intento compilarlo:

gcc file.c 

me sale:

test.c:1: fatal error: iostream: No such file or directory 
compilation terminated. 

Por lo que sé, lo he necesitado todas las bibliotecas, lo que estoy haciendo mal?

+10

[Deshacerse de la 'sistema ("PAUSE");'!] (Http://www.gidnetwork.com/ b-61.html) –

+0

'system (" PAUSE ")' está bien en Windows (MinGW y Cygwin deberían estar bien con eso). Pero sí, se romperá en Linux. – cHao

+0

@cHao: también es una de las formas más ridículas de esperar antes de que finalice un programa.¿Engendrando un proceso separado solo para esperar? ¡Se puede implementar en unas pocas líneas de código! – dreamlax

Respuesta

34

Está intentando compilar C++ con un compilador de C. Pruebe g++ file.c en su lugar.

Además, es una buena práctica nombrar su archivo file.cpp en su lugar - nombrarlo .c no lo detendrá compilando, pero ayudará a herramientas como make. Además, ayudará a otras personas que encuentren su código fuente más adelante (incluido usted).

Editar: Su código tiene algunos otros problemas que no están relacionados con su pregunta, pero que va a correr a ellos tan pronto como usted lo consigue para compilar:

  1. Su (char1 != "T" || "F") debería ser (char1 != "T" && char1 != "F") (tenga en cuenta && en lugar de ||)
  2. Está leyendo otro carácter cuando obtiene una entrada incorrecta, pero como su código no tiene bucles, el programa se cerrará antes de que haga algo con el siguiente carácter.
  3. Como David Schwartz señala, it's worth removing system("PAUSE")

Estos son errores muy comunes para los novatos en C (Bienvenido! Yo recomiendo empezar con algunos tutoriales o libros de introducción. Aquí es un excelente list of C books and tutorials).

Si se encuentra con algo que no puede resolver por su cuenta, no dude en abrir otra pregunta.

+2

Me sorprendió descubrir que 'g ++ file .c' trata 'file.c' como código C++ en lugar de código C. Supongo que tiene sentido, pero no es obvio. El mejor consejo es * usar * 'g ++' y usar el sufijo correcto para el idioma (típicamente '.cpp', pero otros son posibles). –

6

Eso es código C++, no C, y se debe compilar en consecuencia. (. También tiene numerosos errores lógicos, pero podemos preocuparnos por eso más adelante)

6

Tiene código C++:

#include <iostream> 
#include <string> 
using namespace std; 
/* ... */ 

Pero está tratando de compilarlo como si se tratara de C:

gcc file.c 

C++ no es C y no debería tratarlo como si lo fuera.

Intente cambiar el nombre de su archivo y utilizar file.cppg++ en lugar de gcc:

g++ file.cpp 
+0

El cambio de nombre del archivo no es estrictamente necesario, pero el nombre cambiado le permitirá usar 'make' con mayor eficacia. – sarnold

+1

Algunos compiladores eligen cómo interpretar un archivo basado en la extensión (si no se especifica en qué idioma se encuentra). – dreamlax

+0

Parece una optimización completamente razonable. :) – sarnold

Cuestiones relacionadas