2011-12-22 15 views
11

Potrzebuję skompilować kod na moim systemie Linux. Jest to prosty kod i nie wiem co jest nie tak:Nie mogę skompilować C++ z gcc

Mam ten kod i nie mogę go skompilować:

#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; 
} 

Gdy próbuję go skompilować:

gcc file.c 

Otrzymuję:

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

O ile mi wiadomo, mam wszystkie potrzebne biblioteki, co robię źle?

+10

[pozbyć się 'system ("PAUSE");'!] (Http://www.gidnetwork.com/ b-61.html) –

+0

'system (" PAUSE ")' działa poprawnie na Windowsie (MinGW i Cygwin powinny być z nim w porządku). Ale tak, przerwie to w Linuksie. – cHao

+0

@ cHao: Jest to również jeden z najbardziej absurdalnych sposobów oczekiwania przed wyjściem programu.Tarła cały oddzielny proces, tylko czekać ?! Może być zaimplementowany w kilku liniach kodu! – dreamlax

Odpowiedz

34

Próbujesz skompilować C++ za pomocą kompilatora C. Zamiast tego spróbuj g++ file.c.

Poza tym dobrze jest nazwać plik file.cpp zamiast - nazwanie go .c nie zatrzyma go kompilacji, ale pomoże to narzędziom takim jak make. Pomoże to również innym osobom, które natrafią na Twój kod źródłowy później (w tym także na Ciebie).

Edit: Twój kod ma kilka innych problemów, które nie są związane z pytaniem, ale będzie prowadzony do nich jak najszybciej dostać się do kompilacji:

  1. Twój (char1 != "T" || "F") powinny być (char1 != "T" && char1 != "F") (zanotuj && zamiast ||)
  2. Czytasz inną postać, gdy dostajesz złe wejście, ale ponieważ twój kod nie ma pętli, program zakończy działanie, zanim zrobi cokolwiek z następnym znakiem.
  3. Jak David Schwartz podkreśla it's worth removing system("PAUSE")

Są to dość częste błędy dla początkujących do C (Witaj! Polecam zaczynając od niektórych samouczki lub książek wprowadzających. Oto doskonały list of C books and tutorials).

Jeśli napotkasz coś, czego nie możesz rozwiązać samodzielnie, możesz otworzyć kolejne pytanie.

+2

Zaskoczyło mnie odkrycie, że plik' g ++ .c' traktuje 'plik.c' jako kod C++ zamiast kodu C. Przypuszczam, że ma to sens, ale nie jest to oczywiste. Najlepszą radą jest * oba * użycie 'g ++' i użycie odpowiedniego sufiksu dla języka (zazwyczaj '.cpp', ale inne możliwe). –

6

To jest kod C++, a nie C i musi zostać odpowiednio skompilowany. (. Posiada również liczne błędy logiczne, ale możemy się martwić o tym później)

6

masz kodu C++:

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

Ale staramy się go skompilować, jakby to było C:

gcc file.c 

C++ to nie C i nie powinieneś go traktować tak, jakby był.

Spróbuj zmiana nazwy pliku do file.cpp i używać g++ zamiast gcc:

g++ file.cpp 
+0

Zmiana nazwy pliku nie jest bezwzględnie konieczna, ale zmieniona nazwa umożliwi bardziej efektywne użycie 'make'. – sarnold

+1

Niektóre kompilatory wybierają sposób interpretowania pliku na podstawie rozszerzenia (jeśli nie jest informowany, w jakim języku jest on ustawiony). – dreamlax

+0

To wydaje się być całkowicie rozsądną optymalizacją. :) – sarnold

Powiązane problemy