Первая программа (Проблемы с компиляцией)

Модератор: Модераторы разделов

Аватара пользователя
Sonic
Сообщения: 478

Первая программа

Сообщение Sonic »

Вопрос самый ламерский, но не могу не задать. Дело обстоит так...читаю многоуважаемую книгу Бьерн Страуструп. Язык программирования С++, и там запоролся на первой же проге.

Код: Выделить всё

#include <iostream.h>

         int main ()
         {
            cout << "Hello, World!\n";
         }


При её компиляции gcc сильно материться... А точнее, как я понял не находит библиотеки iostream.h, так вот вопрос где её взять??? А то без неё выходит бессмысленной сторка cout << "Hello, World!\n";
LinuxForum.ru :: Форум пользователей ОС Linux
Спасибо сказали:
Аватара пользователя
Sparky
Сообщения: 604
Статус: core dumped
ОС: Plan 9

Re: Первая программа

Сообщение Sparky »

Поскольку код на C++ gcc и не будет тебе его копилить надо флаги указать помоему какие то!
Вот так скомпилит

Код: Выделить всё

#include <iostream.h>
void main()
{
       printf(%s,"Hello, World!");
}

Добавил @ 17.06.2004 14:52
Вот как надо
gcc -o foo -x c++ foo
Блог
--------------------

GCS/M/MU/P/IT/E d- s: a- C++(+++) UBL++ P->-- L+++$ E- W+++$ N* o? K? w>--
O M-@ V- PS@ PE+ Y+ PGP+ t 5 X R* tv-->- b++ DI? D>+ G e+(++) h--- r+ y++
Спасибо сказали:
Аватара пользователя
Jan2ary
Бывший модератор
Сообщения: 630
Статус: Тщедушный очкарик

Re: Первая программа

Сообщение Jan2ary »

Расширение сделай .cc, тогда он поймет, что это С++. Или компиляй через g++ .
И еще, если написал int main, то лучше писать и return 0; Правила хорошего тона :)
Не шалю, никого не трогаю, починяю примус...
Спасибо сказали:
Аватара пользователя
Sonic
Сообщения: 478

Re: Первая программа

Сообщение Sonic »

Попрошу заметить писал не я... Хотя это не важно, спасибо за совет
Добавил @ 17.06.2004 15:10
Что-то всё равно материться... Перво исходный текст проги скопилил и gcc и g++ с именем 2.сс, вроде понятия расширения нет в Линуксе. Это я стараюсь подстроиться под код книги, чтобы дальше легче по ней было...
LinuxForum.ru :: Форум пользователей ОС Linux
Спасибо сказали:
Аватара пользователя
Gloomy
Сообщения: 340
Статус: сочувствующий

Re: Первая программа

Сообщение Gloomy »

Sonic
Исходники всякие при установке ставил? Возможно что у тебя просто нет нужных файлов (в т.ч. iostream.h). Если все ставилось то попробуй написать так:

Код: Выделить всё

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


Компиляция:

Код: Выделить всё

gcc -x c++ hello.cpp -o hello
Спасибо сказали:
Аватара пользователя
Sparky
Сообщения: 604
Статус: core dumped
ОС: Plan 9

Re: Первая программа

Сообщение Sparky »

(Jan2ary @ Четверг, 17 Июня 2004, 14:01) писал(а):Расширение сделай .cc, тогда он поймет, что это С++. Или компиляй через g++ .
И еще, если написал int main, то лучше писать и return 0; Правила хорошего тона :)

Ну вопервых не сс а сpp если уж на то пошло а во вторых для gcc можно указать
флаг, который я показал уже "-x". B)
Добавил @ 17.06.2004 15:24
gcc -o foo.cpp foo
а using namespace std не обязательно тут
Блог
--------------------

GCS/M/MU/P/IT/E d- s: a- C++(+++) UBL++ P->-- L+++$ E- W+++$ N* o? K? w>--
O M-@ V- PS@ PE+ Y+ PGP+ t 5 X R* tv-->- b++ DI? D>+ G e+(++) h--- r+ y++
Спасибо сказали:
Аватара пользователя
Sonic
Сообщения: 478

Re: Первая программа

Сообщение Sonic »

(Gloomy @ Четверг, 17 Июня 2004, 11:19) писал(а):Sonic
Исходники всякие при установке ставил? Возможно что у тебя просто нет нужных файлов (в т.ч. iostream.h). Если все ставилось то попробуй написать так:

Код: Выделить всё

<!--QuoteEBegin-->#include <iostream.h><!--QuoteEBegin-->using namespace std;<!--QuoteEBegin-->int main()<!--QuoteEBegin-->{<!--QuoteEBegin-->  cout << "Hello, World!\n";<!--QuoteEBegin-->  return 0;<!--QuoteEBegin-->}<!--QuoteEBegin-->

Компиляция:

Код: Выделить всё

gcc -x c++ hello.cpp -o hello

Вот что пишет...

Код: Выделить всё

gcc -x c++ hello.cpp -o hello
In file included from /usr/include/c++/3.2.2/backward/iostream.h:31,
                 from hello.cpp:1:
/usr/include/c++/3.2.2/backward/backward_warning.h:32:2: warning: #warning This file includes at least one deprecated or antiquated header. Please consider using one of the 32 headers found in section 17.4.1.2 of the C++ standard. Examples include substituting the <X> header for the <X.h> header for C++ includes, or <sstream> instead of the deprecated header <strstream.h>. To disable this warning use -Wno-deprecated.
hello.cpp:7:2: warning: no newline at end of file
/tmp/ccAhwYID.o(.text+0x19): In function `main':
: undefined reference to `std::cout'
/tmp/ccAhwYID.o(.text+0x1e): In function `main':
: undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)'
/tmp/ccAhwYID.o(.text+0x4a): In function `__static_initialization_and_destruction_0(int, int)':
: undefined reference to `std::ios_base::Init::Init[in-charge]()'
/tmp/ccAhwYID.o(.text+0x79): In function `__tcf_0':
: undefined reference to `std::ios_base::Init::~Init [in-charge]()'
/tmp/ccAhwYID.o(.eh_frame+0x11): undefined reference to `__gxx_personality_v0'
collect2: ld returned 1 exit status

Добавил @ 17.06.2004 15:27
Я делал полную установку... Red Hat 9
LinuxForum.ru :: Форум пользователей ОС Linux
Спасибо сказали:
Аватара пользователя
Sparky
Сообщения: 604
Статус: core dumped
ОС: Plan 9

Re: Первая программа

Сообщение Sparky »

Код: Выделить всё

#include <iostream>
using namespace std;
int main()
{
  std::cout << "Hello, World!\n";
  return 0;
}

Попробуй вот так B)
Блог
--------------------

GCS/M/MU/P/IT/E d- s: a- C++(+++) UBL++ P->-- L+++$ E- W+++$ N* o? K? w>--
O M-@ V- PS@ PE+ Y+ PGP+ t 5 X R* tv-->- b++ DI? D>+ G e+(++) h--- r+ y++
Спасибо сказали:
Аватара пользователя
Jan2ary
Бывший модератор
Сообщения: 630
Статус: Тщедушный очкарик

Re: Первая программа

Сообщение Jan2ary »

Ну вопервых не сс а сpp если уж на то пошло

Код: Выделить всё

$man gcc
...
       file.cc
       file.cp
       file.cxx
       file.cpp
       file.c++
       file.C
           C++ source code which must be preprocessed.
...
Не шалю, никого не трогаю, починяю примус...
Спасибо сказали:
Аватара пользователя
Sonic
Сообщения: 478

Re: Первая программа

Сообщение Sonic »

Мы с Alejandro вывели, точнее он вывел, что если код

Код: Выделить всё

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


g++ -o hello hello.cpp

То там выводяться только варниры, на что как сказал он можно забить. Появляеться файл hello, вполне работающий
LinuxForum.ru :: Форум пользователей ОС Linux
Спасибо сказали:
Аватара пользователя
Sparky
Сообщения: 604
Статус: core dumped
ОС: Plan 9

Re: Первая программа

Сообщение Sparky »

Общепринятое cpp!

Добавил @ 17.06.2004 15:45

(Sonic @ Четверг, 17 Июня 2004, 14:43) писал(а):Мы с Alejandro вывели, точнее он вывел, что если код

Код: Выделить всё

<!--QuoteEBegin-->#include <iostream.h><!--QuoteEBegin-->int main()<!--QuoteEBegin-->{<!--QuoteEBegin--> cout << "Hello, World!" << endl;<!--QuoteEBegin--> return 0;<!--QuoteEBegin-->} <!--QuoteEBegin-->

g++ -o hello hello.cpp
То там выводяться только варниры, на что как сказал он можно забить. Появляеться файл hello, вполне работающий

Возьми VStudio.NET и не парься :lol:
Блог
--------------------

GCS/M/MU/P/IT/E d- s: a- C++(+++) UBL++ P->-- L+++$ E- W+++$ N* o? K? w>--
O M-@ V- PS@ PE+ Y+ PGP+ t 5 X R* tv-->- b++ DI? D>+ G e+(++) h--- r+ y++
Спасибо сказали:
Аватара пользователя
Sonic
Сообщения: 478

Re: Первая программа

Сообщение Sonic »

А разница есть?
LinuxForum.ru :: Форум пользователей ОС Linux
Спасибо сказали:
Аватара пользователя
Sparky
Сообщения: 604
Статус: core dumped
ОС: Plan 9

Re: Первая программа

Сообщение Sparky »

Есть эта приблуда от Гея Билтса все Visual никакой тебе консоли B)
Блог
--------------------

GCS/M/MU/P/IT/E d- s: a- C++(+++) UBL++ P->-- L+++$ E- W+++$ N* o? K? w>--
O M-@ V- PS@ PE+ Y+ PGP+ t 5 X R* tv-->- b++ DI? D>+ G e+(++) h--- r+ y++
Спасибо сказали:
Аватара пользователя
Jan2ary
Бывший модератор
Сообщения: 630
Статус: Тщедушный очкарик

Re: Первая программа

Сообщение Jan2ary »

(Sparky @ Четверг, 17 Июня 2004, 14:30) писал(а):

Код: Выделить всё

<!--QuoteEBegin-->#include <iostream><!--QuoteEBegin-->using namespace std;<!--QuoteEBegin-->int main()<!--QuoteEBegin-->{<!--QuoteEBegin--> std::cout << "Hello, World!\n";<!--QuoteEBegin--> return 0;<!--QuoteEBegin-->}

Попробуй вот так B)

А у меня тоже не работает :) С теми же ошибками.
А g++ работает. Даже без предупреждений!
Не шалю, никого не трогаю, починяю примус...
Спасибо сказали:
Аватара пользователя
polachok
Бывший модератор
Сообщения: 2199
Статус: главный форумный маргинал
ОС: gnu/linux

Re: Первая программа

Сообщение polachok »

не легче g++ юзать? короче хотя бы... :) я тоже вот занялся изучением c++
хотя он говорит надо Wno-deprecated юзать...
И немедленно выпил.
Спасибо сказали:
Аватара пользователя
Sonic
Сообщения: 478

Re: Первая программа

Сообщение Sonic »

Есть эта приблуда от Гея Билтса все Visual никакой тебе консоли

Разницу я спрашивал про расширения.
А у меня тоже не работает  С теми же ошибками.
А g++ работает.

Может версия другая...
LinuxForum.ru :: Форум пользователей ОС Linux
Спасибо сказали:
Аватара пользователя
Alejandro
Сообщения: 98
Статус: Наследник "Астарота"

Re: Первая программа

Сообщение Alejandro »

(Sparky @ Четверг, 17 Июня 2004, 14:44) писал(а):Возьми VStudio.NET и не парься :lol:

Спарки, а вот за флейм на "вечную" тему будешь пивом расплачиваться в ближайшие n лет и никакая рекурсия тебе тут не поможет ;) :lol:

Добавил @ 17.06.2004 15:59

(Sonic @ Четверг, 17 Июня 2004, 14:54) писал(а):
Есть эта приблуда от Гея Билтса все Visual никакой тебе консоли

Разницу я спрашивал про расширения.
А у меня тоже не работает  С теми же ошибками.
А g++ работает.

Может версия другая...

Это не другая версия, просто с++ -ые файлы компилит g++ - как бы подвариант gcc, на самом деле сие одно и тоже
Follow the white Rabbit!
Спасибо сказали:
Аватара пользователя
Sparky
Сообщения: 604
Статус: core dumped
ОС: Plan 9

Re: Первая программа

Сообщение Sparky »

Спарки, а вот за флейм на "вечную" тему будешь пивом расплачиваться в ближайшие n лет и никакая рекурсия тебе тут не поможет

Виноват, каюсь. :blink:
P.S. Не хотел бы я пивом рекурсивно раплачиваться :lol:
Блог
--------------------

GCS/M/MU/P/IT/E d- s: a- C++(+++) UBL++ P->-- L+++$ E- W+++$ N* o? K? w>--
O M-@ V- PS@ PE+ Y+ PGP+ t 5 X R* tv-->- b++ DI? D>+ G e+(++) h--- r+ y++
Спасибо сказали:
Аватара пользователя
Mitya-ncc
Сообщения: 268
Статус: Живущий тут

Re: Первая программа

Сообщение Mitya-ncc »

хотя он говорит надо Wno-deprecated юзать...

Не, не надо. Но если iosteam используешь то надо указываеть пространство имён: допустим не cout, а std::cout и т.д. B)
В одном мгновеньи – видеть вечность,
Огромный мир в горсти песка,
В одной песчинке – бесконечность,
И небо в чашечке цветка.
Спасибо сказали:
Аватара пользователя
Sonic
Сообщения: 478

Re: Первая программа

Сообщение Sonic »

(Mitya-ncc @ Четверг, 17 Июня 2004, 20:14) писал(а):Не, не надо. Но если iosteam используешь то надо указываеть пространство имён: допустим не cout, а std::cout и т.д. B)

Если честно, то нифига не понял :blink:
LinuxForum.ru :: Форум пользователей ОС Linux
Спасибо сказали:
Аватара пользователя
Alejandro
Сообщения: 98
Статус: Наследник "Астарота"

Re: Первая программа

Сообщение Alejandro »

(Mitya-ncc @ Четверг, 17 Июня 2004, 23:14) писал(а):Не, не надо. Но если iosteam используешь то надо указываеть пространство имён: допустим не cout, а std::cout и т.д. B)

Это не обязательно в gcc(g++)
Follow the white Rabbit!
Спасибо сказали:
Аватара пользователя
Selecter
Сообщения: 311

Re: Первая программа

Сообщение Selecter »

The problem is that cout and iostream.h are part of C++, but gcc only
handles C.  To compile C++ code, you need to invoke the compiler as g++.
Спасибо сказали:
Аватара пользователя
Mitya-ncc
Сообщения: 268
Статус: Живущий тут

Re: Первая программа

Сообщение Mitya-ncc »

Я о том, что сейчас вроде (в С++) заголовочные файлы надо так подключать (без .h)

Код: Выделить всё

#include <iostream>

Но вместо, к примеру cout, надо написать

Код: Выделить всё

std::cout << "...."

То есть с прямым указанием пространства имён.
Это в с++, си'шники отдыхают :D
(так там нет даже такого понятия, как пространство имён)
А компилировать так:

Код: Выделить всё

g++ test.cpp -o test

Или я неправ? Это тоже may be ... :huh:
В одном мгновеньи – видеть вечность,
Огромный мир в горсти песка,
В одной песчинке – бесконечность,
И небо в чашечке цветка.
Спасибо сказали:
Аватара пользователя
Aleks_Pingvin
Сообщения: 160
Статус: Свободный пингвин

Re: Первая программа

Сообщение Aleks_Pingvin »

Ни кто на свете не заметит - нас не стало, ни кто не вспомнит здесь о нас...
Спасибо сказали:
Аватара пользователя
Sparky
Сообщения: 604
Статус: core dumped
ОС: Plan 9

Re: Первая программа

Сообщение Sparky »

(Mitya-ncc @ Суббота, 19 Июня 2004, 5:58) писал(а):Я о том, что сейчас вроде (в С++) заголовочные файлы надо так подключать (без .h)

Код: Выделить всё

#include <iostream>

Но вместо, к примеру cout, надо написать

Код: Выделить всё

std::cout << "...."

То есть с прямым указанием пространства имён.
Это в с++, си'шники отдыхают :D
(так там нет даже такого понятия, как пространство имён)
А компилировать так:

Код: Выделить всё

g++ test.cpp -o test

Или я неправ? Это тоже may be ... :huh:

А ты не видел, что я то написал? :D
Блог
--------------------

GCS/M/MU/P/IT/E d- s: a- C++(+++) UBL++ P->-- L+++$ E- W+++$ N* o? K? w>--
O M-@ V- PS@ PE+ Y+ PGP+ t 5 X R* tv-->- b++ DI? D>+ G e+(++) h--- r+ y++
Спасибо сказали:
Аватара пользователя
c3OS
Сообщения: 15

Re: Первая программа

Сообщение c3OS »

Можно ещё такую команду дать:
gcc -lstdc++ hello.cpp -o hello
Спасибо сказали:
ToTo
Сообщения: 6

Re: Первая программа

Сообщение ToTo »

В файле iostream.h насколько помнится написано как все те ворнинги отключить (-Wno-deprecated), а так же там русским языком(ну ладно, пусть не русским, но английским %) ) написано, что следует использовать iostream вместо утаревшего iostream.h, и последний ещё существует лишь для "backward" совместимости...
вроде так, ..
если неправ - поправьте ;)
Спасибо сказали:
Аватара пользователя
Mitya-ncc
Сообщения: 268
Статус: Живущий тут

Re: Первая программа

Сообщение Mitya-ncc »

(ToTo @ Суббота, 19 Июня 2004, 20:09) писал(а):В файле iostream.h насколько помнится написано как все те ворнинги отключить (-Wno-deprecated), а так же там русским языком(ну ладно, пусть не русским, но английским %) ) написано, что следует использовать iostream вместо утаревшего iostream.h, и последний ещё существует лишь для "backward" совместимости...
вроде так, ..
если неправ - поправьте ;)

Ну дак я про это же и говорю ;)
В одном мгновеньи – видеть вечность,
Огромный мир в горсти песка,
В одной песчинке – бесконечность,
И небо в чашечке цветка.
Спасибо сказали:
sdk
Бывший модератор
Сообщения: 210

Re: Первая программа

Сообщение sdk »

("Alejandro") писал(а):Это не обязательно в gcc(g++)


Почему не обязательно? Не понял...
Вроде как gcc следует ISO C++ стандарту.
Почему g++ должен автоматически включать в область видимости пространство имен std (в котором находиться класс cout)?
Или я чего-то не понял, или у вас странный g++ какой-то :). У меня такое не катит ;).
Или std::cout,
или using namespace std (что не есть хорошо), а потом просто cout
или using std::cout, и потом просто cout

Другого не дано :). Не считая Wno-deprecated, конечно :).

2Sonic:
Ты, наверное, читаешь старое издание книги, скорее всего второе.
В новом третьем много с тех пор чего перелопачено, потому как появился новый стандарт C++, отсюда и все твои заморочки -- в твоей книжке описывается старая версия языка :).
Основные моменты, конечно же, остались без изменения, но не зная некоторых новых (в данном случае механизма namespace), можно "попасть" :).

Выхода вижу два: купить новую книжку или просто спрашивать здесь :). Или и то, и другое :).
Серьезность - это способ сделать простые вещи сложными.
Если много знать - устанут глаза. Если много спать - то нет.
Нас никому не сбить с пути - нам пофигу куда идти.
:-)
Спасибо сказали:
Аватара пользователя
Alejandro
Сообщения: 98
Статус: Наследник "Астарота"

Re: Первая программа

Сообщение Alejandro »

(sdk @ Воскресенье, 20 Июня 2004, 0:29) писал(а):Почему не обязательно? Не понял...
Вроде как gcc следует ISO C++ стандарту.
Почему g++ должен автоматически включать в область видимости пространство имен std (в котором находиться класс cout)?
Или я чего-то не понял, или у вас странный g++ какой-то :). У меня такое не катит ;).
Или std::cout,
или using namespace std (что не есть хорошо), а потом просто cout
или using std::cout, и потом просто cout
Другого не дано :). Не считая Wno-deprecated, конечно :).

У какое дело, панимаш. Стоит у меня занчится GCC 3.3.2 и если указать #include<iostream.h> вместо #include<iostream>, то никакие пространства имен указывать нафиг не надо. О как! Чудеса, едреныть ;)
Follow the white Rabbit!
Спасибо сказали: