Code::Blocks - pierwszy program w C++

0

Witam. Pisałem trochę w C za pomocą Code::Blocks, teraz próbuję przejść na C++. Mam jednak poważny problem z napisaniem najprostszego programu.

 #include <iostream>

using namespace std;

int main()
{
    cout << "Hello world!" << endl;
    return 0;
}

Otrzymuję od kompilatora błąd, że nie ma pliku iostream (podobnie jest z innymi plikami nagłówkowymi C++). Przez wyszukiwarkę też nie mogę znaleźć. Próbowałem przeinstalowywania C::B wraz z MinGW, jak i samego MinGW(wybrałem kompilatory C i C++), co nic nie zmieniło. (Chociaż C::B zdaje się pamiętać ustawienia nawet po reinstalacji). Gdzie powinny być te pliki "include'owane" C++?

Programy napisane w C działają bez zarzutu. Czy ktoś może coś doradzić?

0

A jak tworzysz plik .cpp?
Kliknij create a new project -> console application -> c++

0

Pewnie kompilujesz jako C - plik ma rozszerzenie .c ;) Czyli patrz wyżej. A, no i naprawdę nie ma musu, żeby używać std::endl zamiast \n. ;)

0

Dzięki za pomoc, ale plik utworzyłem dokładnie w sposób zalecony przez zaiksa (i w domyślnym pliku jest właśnie "endl" zamiast "\n" ;) ) i ma on rozszerzenie cpp. Ale coś jest na rzeczy - Codeblocks nie rozpoznaje żadnego elementu składni C++, wyrzuca błędy przy namespace, cout i endl.

0

To znaczy zapewne wyrzuca te błędy, bo nie może znaleźć biblioteki... Wiecie może gdzie ma się znajdować plik iostream, w jakim folderze?

0

Przeinstaluj kompilator lub zainstaluj nowy

0

Pewnie instalowałeś wersję bez kompilatora.
Zainstaluj tego: http://sourceforge.net/projects/codeblocks/files/Binaries/10.05/Windows/codeblocks-10.05mingw-setup.exe (win)

No i zapisz jako .cpp.
Projektu nie trzeba robić, w przeciwieństwie do innych IDE (jak Visual Studio, Qt Creator, itd.)

0

Razi:
Tę wersję miałem zainstalowaną. Teraz, po Twoim zaleceniu ściągnąłem ponownie i jest bez zmian. Wydaje mi się, że nie mam tego pliku iostream ani innych nagłówkowych C++, choć nie mam pojęcia dlaczego - w końcu mam kompilator (sam kompilator też przeinstalowywałem!). Pozostaje mi chyba sprawdzić, czy jak zainstaluję Codeblocks na innym komputerze, to będzie lepiej.

0

Plik iostream jednak jest w \lib\gcc\mingw32\4.4.1\include\c++

Nie mam pojęcia, dlaczego nie jest widziany przez kompilator.

0

Okej, a IDE masz skonfigurowane tak, że wie gdzie te pliki nagłówkowe są? W opcjach kompilatora masz ustawiony Toolchain?

0

Nie znam się na tym. Nic nie zmieniałem (chyba, że przez pomyłkę). Zakładka "Toolchain executables" wygląda tak:

http://img52.imageshack.us/img52/4707/tollchain.png

Te pliki są w odpowiednim folderze.

0

Może dodaj -Ic:\MinGW\include\c++\4.5.2\ (duże i, nie małe L ;) ) do opcji kompilatora.
tylko 4.5.2 sobie zmień na jaką tam wersję masz. :P

0

Azraelu, wielkie dzięki.
Coś ruszyło. Po pierwsze, to nie mam folderu c:\MinGW\include\c++\4.5.2
Mam: C:/MinGW/lib/gcc/mingw32/4.5.2/include/c++/

Wie ktoś dlaczego? Dodałem tę drugą ścieżkę do opcji kompilatora.

Tym razem znowu się nie skompilowało, bo nie mógł znaleźć pliku ...\bits\c++config.h. No to dodałem do opcji kompilatora kolejną ścieżkę C:/MinGW/lib/gcc/mingw32/4.5.2/include/c++/mingw32.

Teraz nie wywala już żadnego błędu tego typu, że nie może znaleźć pliku, ale ciągle znajduje mnóstwo błędów w plikach nagłówkowych: stringfwd.h, cstddef, cwchar.

Przyznaję, że bardziej niż rozwiązanie problemu interesuje mnie odpowiedź na pytanie: "Ale o co chodzi!?!?".

0

Hm, może prościej będzie jeśli odinstalujesz IDE z kompilatorem, zainstalujesz świeżą wersję MinGW, chociażby stąd: http://nuwen.net/mingw.html
Po czym zainstaluj sobie jakieś IDE (może być też C::B - tylko wersję bez kompilatora) i jeśli nie będzie działało - kombinuj z tą ścieżką wyżej.

Jeżeli potrzebujesz pomocy przy instalacji: http://thenewboston.com/forum/viewtopic.php?f=129&t=8056

0

Zrobiłem według Twoich wskazań i jest bez zmian. Wyrzuca błędy w plikach nagłówkowych, na przykład "C:\MinGW\include\c++\4.6.0\bits\stringfwd.h|43|error: unknown type name 'namespace' ".

Zainstalowałem CB na innym komputerze i nie ma problemów. Na sprzęcie, na którym nie działa jest Windows 7 Professional 64bit (chyba powinienem o tym wspomnieć wcześniej...) i to być może przyczyna błędów.

0

ja na win7 64bit instalowałem CB z MinGW i nie było żadnych problemów.

Usuń jeszcze raz wszystko z CB i zainstaluj od nowa wersję z kompilatorem (pewnie to co instalowałeś na tym drugim komputerze). Przy pierwszym uruchomieniu sprawdź czy znalazł MinGW, czy jak to tam pisze na windowsie.

0

O, Nuwen wypuścił już GCC 4.6.0? Dobrze wiedzieć. ;)
Co do Twojego problemu, to albo coś źle robisz, albo masz jakiś dziwny problem. Możesz opisać szczegółowo krok po kroku co zrobiłeś (instalacja MinGW, IDE, konfiguracja, tworzenie projektu, kompilacja) że coś takiego Ci się wyświetliło? Nie miałem nigdy takich problemów z MinGW...

No i jeszcze spytam dla pewności - czy to samo masz przy kompilacji z konsoli? Teraz po zainstalowaniu MinGW z tym przewodnikiem powinieneś mieć możliwość uruchomienia g++ z konsoli:
Start->Uruchom wpisz cmd, pojawi się czarne okno konsoli. Wpisz g++ --version powinieneś dostać informację o wersji kompilatora. Przejdź do jakiegoś katalogu z kodem źródłowym w pliku *.cpp i spróbuj go skompilować:
plik.cpp:

#include <iostream>

int main() {
    std::cout << "Hello World!\n";
    return 0;
}

W konsoli wpisz: g++ plik.cpp, jeśli wszystko będzie ok to w katalogu pojawi Ci się plik a.exe, który po uruchomieniu wyswietli napis Hello World!. Jeżeli dostaniesz jakiś dziwny błąd, że nie rozpoznano namespace, albo coś równie podejrzanego... No to masz problem. :P

0

A, no i naprawdę nie ma musu, żeby używać std::endl zamiast \n. ;)

a wręcz przeciwnie: endl powoduje tyle co '\n' << flush, więc dla przyspieszenia (a to ważne w SPOJach i tym podobnych) lepiej używać \n, a endl dopiero na ostatniej linii komunikatu:

cout << "Program FooBar wersja 1.0\n";
cout << "(C) 2011 Jan Kowalski <[email protected]>\n"
cout << "użycie:\n";
cout << "     foobar.exe plik.txt" << endl;

Kiedy prędkość I/O ma znaczenie, należy unikać endl po każdej linii wielolinijkowego komunikatu.

0

Problem rozwiązany. Dziękuję wszystkim za pomoc. Wystarczył reinstall C::B z wyczyszczeniem rejestru (wcześniej też raz to robiłem, ale widać coś musiałem źle zrobić).

0

w przyszłości posprawdzaj sobie ścieżki w zmiennej środowiskowej PATH, na jakie katalogi kompilatora wskazuje i po tym dojdziesz do rozwiązania.

1 użytkowników online, w tym zalogowanych: 0, gości: 1