Strona 1 z 1

biblioteka conio.h - jak zastąpić?

: 18 kwie 2010, 14:56
autor: Wojtol
Witam ;) Ucze się programować.. Korzystam z tego kursu: http://kursy.ddt.pl Pojawia sie problem z bibliteką conio.h.. Zainstalowałem libconio i ncurses.. zamiast

Kod: Zaznacz cały

getch()
używam

Kod: Zaznacz cały

cin.get()
usunąłem z kodu programu linijkę

Kod: Zaznacz cały

#include <conio.h>
jednak gcc wysypuje błędy.. 'Oto treść calego kodu:

Kod: Zaznacz cały

#include <iostream>
#include <conio.h>

int main()
{
  using namespace std;
  /*Deklaracja zmiennej typu "int" (liczby całkowite)
o nazwie "zmienna_liczba" */
  int zmienna_liczba;

  /*Deklaracja zmiennej typu "int" bez znaku
(czyli bez znaku minusa (liczby większe lub równe 0))
o nazwie "dodatnie"*/
  unsigned int dodatnie;

  /*Deklaracja zmiennej typu "float" (liczby zmienno przecinkowej)
o nazwie "zmiennoprzecinkowa";*/
  float zmiennoprzecinkowa;

  //deklaracja zniennej znakowej typu "char" o nazwie "jeden_znak"
  char jeden_znak;

  /*deklaracja zniennej znakowej typu "char" bez znaku minus
(to będzie wymagało szerszego wyjaśnienia)*/
  unsigned char znak;

  //Deklaracja zmiennej "abc" i przypisanie jej wartości początkowej równej -53;
  int abc = -53;
  //Przypisanie wartości 22 do zmiennej o nazwie "dodatnie";
  dodatnie = 22;
  //Przypisanie wartości 12.42 do zmiennej o nazwie "zmiennoprzecinkowa";
  zmiennoprzecinkowa = 12.42;
  /*Przypisanie do zmiennej o nazwie "znak" wartości 'c'
(to również będzie wymagało szerszego wyjaśnienia)*/
  znak = 'c';

  //wyświetlenie wszystkich zmiennych na ekranie
  cout << "wypisujemy zmienne:" << endl
  <<"  zmienna_liczbowa: " << zmienna_liczba
  << endl
  <<"  dodatnie: " << dodatnie << endl
  <<"  abc: " << abc << endl
  <<"  zmiennoprzecinkowa: " << zmiennoprzecinkowa
  << endl
  <<"  jeden_znak: " << jeden_znak << endl
  <<"  znak: " << znak << endl;

  getch();//Czekaj na dowolny znak z klawiatury
  return(0);
}
Co z tego kodu potrzebuje biblioteki conio.h, że gdy usuwam "#include <conio.h>" z kodu to wyrzuca błędy?
treść błędu:

Kod: Zaznacz cały

wojtek@wojtek-desktop:~/Pulpit$ gcc xxx.cpp -o xxx
/tmp/cc2zufA3.o: In function `__static_initialization_and_destruction_0(int, int)':
xxx.cpp:(.text+0x1d): undefined reference to `std::ios_base::Init::Init()'
xxx.cpp:(.text+0x22): undefined reference to `std::ios_base::Init::~Init()'
/tmp/cc2zufA3.o: In function `main':
xxx.cpp:(.text+0x9c): undefined reference to `std::cout'
xxx.cpp:(.text+0xa1): 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*)'
xxx.cpp:(.text+0xa9): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)'
xxx.cpp:(.text+0xb1): undefined reference to `std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&))'
xxx.cpp:(.text+0xc1): 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*)'
xxx.cpp:(.text+0xd2): undefined reference to `std::basic_ostream<char, std::char_traits<char> >::operator<<(int)'
xxx.cpp:(.text+0xda): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)'
xxx.cpp:(.text+0xe2): undefined reference to `std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&))'
xxx.cpp:(.text+0xf2): 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*)'
xxx.cpp:(.text+0x103): undefined reference to `std::basic_ostream<char, std::char_traits<char> >::operator<<(unsigned int)'
xxx.cpp:(.text+0x10b): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)'
xxx.cpp:(.text+0x113): undefined reference to `std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&))'
xxx.cpp:(.text+0x123): 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*)'
xxx.cpp:(.text+0x134): undefined reference to `std::basic_ostream<char, std::char_traits<char> >::operator<<(int)'
xxx.cpp:(.text+0x13c): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)'
xxx.cpp:(.text+0x144): undefined reference to `std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&))'
xxx.cpp:(.text+0x154): 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*)'
xxx.cpp:(.text+0x165): undefined reference to `std::basic_ostream<char, std::char_traits<char> >::operator<<(float)'
xxx.cpp:(.text+0x16d): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)'
xxx.cpp:(.text+0x175): undefined reference to `std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&))'
xxx.cpp:(.text+0x185): 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*)'
xxx.cpp:(.text+0x191): 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)'
xxx.cpp:(.text+0x199): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)'
xxx.cpp:(.text+0x1a1): undefined reference to `std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&))'
xxx.cpp:(.text+0x1b1): 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*)'
xxx.cpp:(.text+0x1bd): 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> >&, unsigned char)'
xxx.cpp:(.text+0x1c5): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)'
xxx.cpp:(.text+0x1cd): undefined reference to `std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&))'
xxx.cpp:(.text+0x1d4): undefined reference to `std::cin'
xxx.cpp:(.text+0x1d9): undefined reference to `std::basic_istream<char, std::char_traits<char> >::get()'
/tmp/cc2zufA3.o:(.eh_frame+0x11): undefined reference to `__gxx_personality_v0'
collect2: ld returned 1 exit status
//ka_o_3991: poprawiam temat za Ciebie, ale to kosztuje ostrzeżenie. ileż można prosić...

Odp: Problem z brakiem biblioteki conio.h

: 18 kwie 2010, 15:22
autor: norvoles
Z tego co wiem, nie ma na Linuksie conio.h
A poza tym to wygląda jak c++ zatem lepiej będzie użyć g++ do kompilacji :P

Odp: Problem z brakiem biblioteki conio.h

: 18 kwie 2010, 17:57
autor: skoczo
getch() zamień na getchar() i #include <conio.h> na #include <cstdio> i tak jak w poprzednim poście kompiluj g++

Odp: Problem z brakiem biblioteki conio.h

: 18 kwie 2010, 20:08
autor: dawidgarus
getch != getchar
oto implementacja conio.h dla linuksa:
sourceforge.net/projects/linux-conioh/

Odp: Problem z brakiem biblioteki conio.h

: 18 kwie 2010, 22:49
autor: beluosus
Było na forum nie raz. Widać, że szukanie boli. Wracając do problemu, w tym wypadku użycie getch() jest niemal bezcelowe i można zamienić na cin lub "przerzucić" program na ncurses. Dodam jeszcze, że do jeden_znak i zmienna_liczba w trakcie programu nie są przypisane żadne wartości - co za tym idzie, zostaną wyświetlone głupoty. ;) Poza tym problemem nie jest sam getch() tylko jak wspomniał użytkownik norvoles kompilacja przez gcc, a nie g++.

@dawidgarus: nie używałem conio dla Linuksa, ale z tego co widzę to Twój link zawiera suchara. Na dodatek w wersji beta.

Odp: Problem z brakiem biblioteki conio.h

: 19 kwie 2010, 09:59
autor: siano89
ściągnij sobie bibliotekę conio.h i zainstaluj i nie powinno być problemów.

Odp: Problem z brakiem biblioteki conio.h

: 19 kwie 2010, 10:04
autor: ka_o_3991
siano89, bzdury opowiadasz. Generalnie jak już koledzy wyżej powiedzieli conio.h nie ma na Linuksa, poza tą podlinkowaną wyżej nieoficjalną betą.

Odp: Problem z brakiem biblioteki conio.h

: 19 kwie 2010, 13:04
autor: kamilsilver
Ogólnie masz fajny błąd w kodzie:

Kod: Zaznacz cały

using namespace std; 
to piszesz przed mainem nie w nim. Przez to tak dużo błędów std::cout, std::cin.

Kiedyś szukałem rozwiązania jak zrobić getch() nie używając windowsowej biblioteki (bo na linuxie jej nie ma). Albo jej implementacja na linuxa (http://sourceforge.net/projects/linux-conioh/) lub:
Ostatnie posty wątków:
http://debian.linux.pl/threads/16081-Fu ... etch()-w-C
http://eglug.org/node/1818

Ogólnie polecam google ze słowami: linux getch() C C++ i Ncurses


Z ncursem:

Kod: Zaznacz cały

#include <curses.h>
#include <iostream.h>

main(){
unsigned int key;

key = getch();
cout << "Klawisz: " << key << endl; 
}
I przy kompilacji dorzucasz atrybut -lncurses

Odp: Problem z brakiem biblioteki conio.h

: 19 kwie 2010, 14:14
autor: Wojtol
już czaje baze ;) dzięki! ;)