c++ для чайников
Дамоклас 25 октября, 2008 - 09:17.Вообщем решил я научится кодить, достал литературу и, на первом примере застрял.
Програмка использует 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
На Ваш суд:
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!;("<"без ковычек)
}
так компилятор выдал целую литанию
Решение проблемы: Вот
Решение проблемы:
Вот исходники:
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 не только необязательно, но и нежелательно ;)
Тут нужен исходник,
Глянь
Глянь в /boot/develop/etc — там лежат makefile–engine и скелет makefile. Копируй этот скелет к твоим файлам, правишь его под свои нужды, прописываешь cpp–шки, либ–ки и т.д. Затем билдишь одной командой make.
Отправить комментарий