Главная

c++ для чайников

Вообщем решил я научится кодить, достал литературу и, на первом примере застрял.
Програмка использует cin и cout, в пример включены такие заголовочные файлы:

#include “<"stdio.h”>" (без ковычек)
#include “<"iostream.h”>" (без ковычек)

И у меня подозрение, что под BeOS чегото не то, так как компилятор выдал:

/tmp/ccVnaxrE.o: In function `main':
varta.cpp:(.text+0x21): undefined reference to `cout'
varta.cpp:(.text+0x29): undefined reference to `ostream::operator<<(char const *)'
varta.cpp:(.text+0x39): undefined reference to `cin'
varta.cpp:(.text+0x41): undefined reference to `istream::operator>>(int &)'
varta.cpp:(.text+0x86): undefined reference to `cout'
varta.cpp:(.text+0x8e): undefined reference to `ostream::operator<<(char const *)'
varta.cpp:(.text+0x9e): undefined reference to `cout'
varta.cpp:(.text+0xa6): undefined reference to `ostream::operator<<(int)'
collect2: ld returned 1 exit status

? пример

… пример из книги:
Девис.С. Р. C++ для чайников.Диалектика.2003
книга:
http://www.mediafire.com/?dcgdb5kwg7z

попробуй после

попробуй после хидеров добавить строчку

using namespace std;

либо использовать непосрественное указание неймспейса каждый раз. Вот так например

std::cout << gav-gav–gav” << std::endl;

нее, опять

нее, опять ругается:
baron@unknown:~/develop/cpp_pradinukams/01skyrius# gcc varta.cpp
/boot/home/develop/cpp_pradinukams/01skyrius/varta.cpp: In function `int main(int, char **)':
/boot/home/develop/cpp_pradinukams/01skyrius/varta.cpp:12: initializing non–const `bool &' with `ostream & (*)(ostream &)' will use a temporary
/boot/develop/headers/cpp/iostream.h:233: in passing argument 1 of `istream::operator >>(bool &)'
b

Тем не менее

Тем не менее исходная проблема ушла. Чем недоволен в таком случае? :–) Давай–ка в жаббер–аську. Координаты я отправил в приватных сообщениях.

Бинарника то нету.

Бинарника то нету.

так ошибка в коде.

так ошибка в коде. ;–) код покажи — будет тебе диагноз. :–) хотя–бы строчки с 10 по 15–ую.

На Ваш суд: Quickpost this

На Ваш суд:

Free Image Hosting at www.ImageShack.usQuickPost Quickpost this image to Myspace, Digg, Facebook, and others!

есть такой пример

есть такой пример програмки GNU–HelloWorld на с:
#include “<"iostream.h”>" (без ковычек)
int main(){cout<<"Hello!"<"<"endl;return 0;}("<" без ковычек)

но он в проекте BeIDE, там также добавлена libstdc++.r4.so – так, он тож несобирается вон так из терминала:
gcc helloworld.c
хотя, конечно через BeIDE всё собирается и работает,
я даже пробовал подменять код туда с книжного примера – собирается, но бинарник, запустив его с терминала только запрашивает ввести температуру и на этом кончает.

– может у меня в ОСи чего не так?

Взял самый простой

Взял самый простой пример с другой книжки, типа:

#include “<"iostream.h”>"(без ковычек)
void main(void)
{
cout <"<" “Ei!”;("<"без ковычек)
}

так компилятор выдал целую литанию…

Решение проблемы: Вот

Решение проблемы:

Вот исходники:


#include <iostream>
using namespace std;
int main (void) {
cout << “Hello world!” << endl;
return 0;
}

При компиляции получаю ошибки:

$gcc a.cpp
/tmp/cc3JulLI.o: In function `main':
/tmp/cc3JulLI.o:(.text+0.12): undefined reference to `endl(ostream &)'
/tmp/cc3JulLI.o:(.text+0.12): undefined reference to `cout'
/tmp/cc3JulLI.o:(.text+0.12): undefined reference to `ostream::operator<<(char const *)'
collect2: ld returned 1 exit status

Очевидно, просто какая–то библиотека не линкуется. Какая? IOstreams определены в стандартной библиотеке. Значит, её надо найти. Лезу в /boot/develop/lib/x86; библиотека с именем, хоть как–то связанным со стандартным С++, там только одна: libstdc++.r4.so. И действительно, попытка слинковаться с ней решает проблему:

$ gcc -Wall a.cpp /boot/develop/lib/x86/libstdc++.r4.so -o a.out
$ a.out
Hello world!
$

Итак, правильное решение — надо линковаться с правильными библиотеками.

Спасибо,

Спасибо, это помогает выдавать бинарник (также как и проект beide),
даже с книжным вариянтом (без using namespace std;).
Только программа всё равно не работает: только запрашивает ввести температуру, но ничего невыдает…

Похоже придется, копать взё это дело поглубже. Или какую нибудь ерунду прозевал, чтоли.

std::cin >> nCelsius >>

std::cin >> nCelsius >> std::endl;

std::endl не нужен. он лишь для вывода нужен, чтобы конец строки выдать в поток. :–)

+1. Сорри, не увидел

+1. Сорри, не увидел листинг выше :)

При вводе с клавиатуры ждать endl не только необязательно, но и нежелательно ;)

Тут нужен исходник,

Тут нужен исходник, в том виде, в котором ты его написал.
Если ты не набирал код сам, а копировал его, то есть ещё такой прикол: иногда в электронном тексте встречаются юникодные символы, которые выглядят вполне невинно (например, как пробел), но на самом деле являются чем–то необычным. Соответственно, скопированный код не компилируется. Это часто бывает, когда копируешь примеры из BeBook: примеры из BeBook не работают, а набранный «от руки» точно такой же текст компилируется без проблем.
Ещё один вариант, если первый не сработает — попробуй начать с пустого файла, напиши компилирующуюся программу (типа “Hello world”) и постепенно вводи в неё всё новые элементы, стремясь получить пример из книги. В какой–то момент программа перестанет компилироваться, и ты увидишь, какой шаг вызывает ошибку компиляции. Может, ещё какая–то библиотека нужна, хотя, по идее, в первых примерах стандартной библиотеки должно быть достаточно.
Проверь синтакс, пунктуацию. Три экрана воплей компилятора об ошибках обычно свидетельствуют о пропущенной где–то точке с запятой.

Глянь

Глянь в /boot/develop/etc — там лежат makefile–engine и скелет makefile. Копируй этот скелет к твоим файлам, правишь его под свои нужды, прописываешь cpp–шки, либ–ки и т.д. Затем билдишь одной командой make.

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Allowed HTML tags: <a> <em> <i> <img> <strong> <b> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Строки и параграфы переносятся автоматически.

Подробнее о форматировании

CAPTCHA
Введите перечисленные символы, чтобы мы убедились, что вы не робот. Не требуется для зарегистрированных пользователей.
T
s
H
1
1
n
Enter the code without spaces and pay attention to upper/lower case.