Форум русскоязычного сообщества Ubuntu


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: не компилируется программа на C++  (Прочитано 7151 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн zeleniy

  • Автор темы
  • Новичок
  • *
  • Сообщений: 43
    • Просмотр профиля
Здравствуйте. Люди добрые, подскажите, что надо сделать, чтобы скомпилить этот код под:

#include <iostream>
using namespace std;

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

zeleniy@zeleniy-desktop:~$ g++ www.cpp
In file included from /usr/include/c++/4.1.3/cstdio:53,
                 from /usr/include/c++/4.1.3/i486-linux-gnu/bits/c++locale.h:42,
                 from /usr/include/c++/4.1.3/iosfwd:45,
                 from /usr/include/c++/4.1.3/ios:43,
                 from /usr/include/c++/4.1.3/ostream:44,
                 from /usr/include/c++/4.1.3/iostream:44,
                 from www.cpp:1:
/usr/include/stdio.h:21:3: error: #error "Never include <bits/stdio.h> directly; use <stdio.h> instead."
In file included from /usr/include/wchar.h:37,
                 from /usr/include/c++/4.1.3/cwchar:55,
                 from /usr/include/c++/4.1.3/bits/postypes.h:46,
                 from /usr/include/c++/4.1.3/iosfwd:49,
                 from /usr/include/c++/4.1.3/ios:43,
                 from /usr/include/c++/4.1.3/ostream:44,
                 from /usr/include/c++/4.1.3/iostream:44,
                 from www.cpp:1:
/usr/include/stdio.h:21:3: error: #error "Never include <bits/stdio.h> directly; use <stdio.h> instead."
/usr/include/c++/4.1.3/cstdio:100: ошибка: ‘::FILE’ не был декларирован
/usr/include/c++/4.1.3/cstdio:101: ошибка: ‘::fpos_t’ не был декларирован
/usr/include/c++/4.1.3/cstdio:103: ошибка: ‘::clearerr’ не был декларирован... и так до бесконечности

И всё сводится, к тому что, что-то где-то не декларировано. Пакет build-essential стоит... пама... пама... памажите )))

Оффлайн xxxYURAxxx

  • Активист
  • *
  • Сообщений: 537
  • LinuxFormat друг человека...
    • Просмотр профиля
Re: не компилируется программа на C++
« Ответ #1 : 27 Март 2008, 23:57:30 »
даже и не знаю что вам сказать

cat hello.cpp
#include <iostream>
using namespace std;

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

g++ hello.cpp

./a.out
Hello!hello!

g++ -v
Using built-in specs.
Target: i486-linux-gnu
Configured with: ../src/configure -v --enable-languages=c,c++,fortran,objc,obj-c++,treelang --prefix=/usr --enable-shared --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --enable-nls --with-gxx-include-dir=/usr/include/c++/4.1.3 --program-suffix=-4.1 --enable-__cxa_atexit --enable-clocale=gnu --enable-libstdcxx-debug --enable-mpfr --enable-checking=release i486-linux-gnu
Thread model: posix
gcc version 4.1.3 20070929 (prerelease) (Ubuntu 4.1.2-16ubuntu2)


а посмотреть можно
/usr/include/stdio.h
на 21 строке и убрать error: #error "Never include <bits/stdio.h> directly; use <stdio.h> instead."
заменив bits/stdio.h на stdio.h

Thread

  • Гость
Re: не компилируется программа на C++
« Ответ #2 : 28 Март 2008, 00:28:19 »
В /usr/include/stdio.h вообще подобный текст не должен присутствовать. Получается, что у автора bits/stdio.h поставлен на место stdio.h. Можно попробовать переустановить libc6-dev.

Оффлайн RK

  • Новичок
  • *
  • Сообщений: 19
    • Просмотр профиля
Re: не компилируется программа на C++
« Ответ #3 : 29 Март 2008, 01:12:23 »
#include <iostream>
   Мнэ, а не iostream.h ?
_______________________
Ubuntu 9.10
Debian 5.0

Thread

  • Гость
Re: не компилируется программа на C++
« Ответ #4 : 29 Март 2008, 10:57:18 »
#include <iostream>
   Мнэ, а не iostream.h ?


iostream.h - deprecated-хедер и будет убран в следующей версии стандарта. Правильные названия таковы: iostream, algorithm, utility, cstdlib, cctype, climits, ...

rtfm: http://en.wikipedia.org/wiki/C%2B%2B_standard_library :)

Оффлайн zeleniy

  • Автор темы
  • Новичок
  • *
  • Сообщений: 43
    • Просмотр профиля
Re: не компилируется программа на C++
« Ответ #5 : 29 Март 2008, 13:25:21 »
Всем спасибо за помощь.

Переустановка libc6-dev ничего не дала - снёс, всё что знал, что связано с c++ и установил заново... и заработала !!! ))))

Оффлайн RK

  • Новичок
  • *
  • Сообщений: 19
    • Просмотр профиля
Re: не компилируется программа на C++
« Ответ #6 : 29 Март 2008, 13:42:50 »
#include <iostream>
   Мнэ, а не iostream.h ?


iostream.h - deprecated-хедер и будет убран в следующей версии стандарта. Правильные названия таковы: iostream, algorithm, utility, cstdlib, cctype, climits, ...

rtfm: http://en.wikipedia.org/wiki/C%2B%2B_standard_library :)

   понятненьго:)
_______________________
Ubuntu 9.10
Debian 5.0

Оффлайн xwizard

  • Новичок
  • *
  • Сообщений: 33
    • Просмотр профиля
Re: не компилируется программа на C++
« Ответ #7 : 31 Март 2008, 16:50:27 »
лучше юзайте не потоковый ввод-вывод.
и все будет ок.

Thread

  • Гость
Re: не компилируется программа на C++
« Ответ #8 : 31 Март 2008, 17:56:14 »
лучше юзайте не потоковый ввод-вывод.
и все будет ок.

И что это означает?

Оффлайн xwizard

  • Новичок
  • *
  • Сообщений: 33
    • Просмотр профиля
Re: не компилируется программа на C++
« Ответ #9 : 08 Апрель 2008, 17:31:00 »
ПОКАЗЫВАЮ:

#include <iostream>
using namespace std;

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



прога, которая будет работать точно (если установлен гцц и библиотеки), выглядит примерно так:
/* HelloWorld.c */
#include <stdio.h>

int main(void)
{
  printf("Hello!\n");
  return 0;
}

Thread

  • Гость
Re: не компилируется программа на C++
« Ответ #10 : 08 Апрель 2008, 17:45:33 »
ПОКАЗЫВАЮ:

#include <iostream>
using namespace std;

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



прога, которая будет работать точно (если установлен гцц и библиотеки), выглядит примерно так:
/* HelloWorld.c */
#include <stdio.h>

int main(void)
{
  printf("Hello!\n");
  return 0;
}

Это-то понятно, а каковы аргументы? Я не вижу ничего плохого в использовании возможностей стандартной библиотеки C++, на то она и стандартная библиотека.

Оффлайн xwizard

  • Новичок
  • *
  • Сообщений: 33
    • Просмотр профиля
Re: не компилируется программа на C++
« Ответ #11 : 10 Апрель 2008, 11:20:38 »
эх... сам не вижу весомых аргументов.
просто у меня такая же фигня была - всмысле, реакция на такой код от гцц ничем на моей машине не отличалась.

а как оргумент - более организованное программирование - повышение кпд работы кодера + делает код более читаемым + не использует лишних библиотек, которые в данном случае - в проге "Привет Мир" - просто лишние.

можно использовать вообще файловый ввод-вывод, используя дескриптор консоли = 1.
кода на пару строчек побольше, зато низкоуровневый ввод-вывод и точно все компилится со стандартными библиотеками.

в вопросе программирования важно то, как работает прога, а не как ее легко было кодить, а потом фиг разберешься, что в ней не работает.

как пример - если эту же прогу распространять в виде исходного кода, то у половины юзверей она не заработает.

+ файловый ввод-вывод позволяет понимать программисту, что в действительности будет происходить в системе - как следствие - легче будет разобраться в возникающих ошибках.

хоть немного убедил? :)

Оффлайн 12d3

  • Активист
  • *
  • Сообщений: 674
  • Ubuntu 10.04
    • Просмотр профиля
Re: не компилируется программа на C++
« Ответ #12 : 10 Апрель 2008, 12:19:51 »
неа, неубедительно  :)
Библиотеку ввода-вывода что там - что там подключать надо.
То что printf("Hello world!\n"); проще и понятнее, мягко говоря, неочевидно. Хотя плюсы все равно есть )
как пример - если эту же прогу распространять в виде исходного кода, то у половины юзверей она не заработает.
Если кивать в сторону топикстартера, то проблема в хедерах а не в коде. Вообще должно работать и так, и так. У всех.

Thread

  • Гость
Re: не компилируется программа на C++
« Ответ #13 : 10 Апрель 2008, 14:24:54 »
а как оргумент - более организованное программирование - повышение кпд работы кодера + делает код более читаемым + не использует лишних библиотек, которые в данном случае - в проге "Привет Мир" - просто лишние.

Заголовочный файл != библиотека. Можешь посмотреть, в обоих случаях C++-программа будет слинкована с libstdc++. Разве что шаблоны не будут обрабатываться.

можно использовать вообще файловый ввод-вывод, используя дескриптор консоли = 1.
кода на пару строчек побольше, зато низкоуровневый ввод-вывод и точно все компилится со стандартными библиотеками.

1 - это не дескриптор консоли. Он может быть чем угодно, например, межпроцессным pipe'ом (кстати, в большинстве случаев и является).

как пример - если эту же прогу распространять в виде исходного кода, то у половины юзверей она не заработает.
!!!
-> Мы собираем прогу на своей системе и раздаём всем направо и налево. В итоге: на системе с другими версиями библиотек прога не работает; на x86-64, sparc32 и mips не работает, т.к. мы собрали под x86; на Windows не работает, т.к. тот не умеет грузить ELF-бинарники; ...
-> Мы раздаём исходный код, написанный в соответствии со стандартом. На каждой системе берём C++-компилятор, следующий стандарту, собираем, и всё работает.

В общем: не убедил.

Оффлайн xwizard

  • Новичок
  • *
  • Сообщений: 33
    • Просмотр профиля
Re: не компилируется программа на C++
« Ответ #14 : 12 Апрель 2008, 14:28:45 »
ок.

я делетант в вопросах программирования в лине под с/с++......
так что сильно не бейте. :)
я хотя бы пытался аргументировать свою точку зрения.

2 a-v: я не уверен был точно, что 1 - это дескриптор консоли, и да, знаю что он можт быть дескриптором кого угодно  - но у консольного ввода-вывода дескриптор то ли 1 то ли 2... я не помню сейчас, писал недели две назад прогу, которая печатала в консоль как в файл.
(две недели - огромный срок для моей памяти...)

и еще такой вопрос: повторюсь, на всяк случай, что я пока не ас кодинга под НЕВИНДУ :)

поэтому 2 вопроса:
1) есть ли в с/с++ функции для работы с типом string? (тогда как подключить нужную библиотеку)
2) если мне хотса создать окошко с кнопочкой, надо лезть обязательно в какие-то редакторы, типа эклипса того же или мона в gedit все набрать. (скорее всего мона, НО ГДЕ ВЗЯТЬ то, что нужно писать?)

поясняю: большая часть литературы в доме - книги по delphi -> по с/с++ у меня тока парочку руководств, и те - для винды + довольно ламерские.
типа string я так и не обнаружил. обнаружил зато char.

показываю пример:
<stdio.h>

int main(void)
{
    char ** s[]="";
    char ** s2[]="";

    printf("введите 1ую строку:\n");
    scanf("%s", s);  /*Не уверен, что %s, но по-моему так.*/
    printf("введите 2ую строку:\n");
    scanf("%s",s2);
    printf("\n\n\t Введено: \n -%s- \n -%s- \n", s, s2);

    return 0;
}

не пашет должным образом.
если мы заменим
char ** s[]="";
 char ** s2[]="";

на

char ** s[200]="";
 char ** s2[200]="";

то работать будет, но функция sizeof(s) будет выдавать 200, независимо от того, скока букв впечатали. + ограничение размера вводимой строки...

можно написать свою библиотеку, конечно, что я и сделал.
но - вопрос такой - неужели это до сих пор никому не пригождалось?
считываем строку, считаем сколько в ней символов и например сравниваем

if (s == "NAME") {printf("YES\n");}
что бы можно было работать, а то не работает - т.е. не проверяет на равность строк, только побуквенно. приходится убивать время на циклы...

 

Страница сгенерирована за 0.059 секунд. Запросов: 24.