Member 14789982 Ответов: 3

Использование getch() для перемещения в C++ macos


Я искал в интернете информацию о том, как можно обнаружить нажатие кнопки, но видел только примеры windowsOS. Я хочу иметь возможность использовать getch() для простой игры, которую я делаю на mac. Я также включил: #include <ncurses.h>
Я пытался сделать это:

Что я уже пробовал:

char x;
x = getch();

if(x == 'A'){
    std::cout << "Move to the left";
}


Я получаю эту ошибку:(кстати, я использую Clion)
Undefined symbols for architecture x86_64:
  "_stdscr", referenced from:
      _main in main.cpp.o
  "_wgetch", referenced from:
      _main in main.cpp.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[3]: *** [snakegame] Error 1
make[2]: *** [CMakeFiles/snakegame.dir/all] Error 2
make[1]: *** [CMakeFiles/snakegame.dir/rule] Error 2
make: *** [snakegame] Error 2


Может ли кто-нибудь объяснить, в чем может быть ошибка?

CPallini

Вы занимаетесь кросс-компиляцией? Не могли бы вы указать, какова ваша ОС разработки и какова ваша целевая ОС?

3 Ответов

Рейтинг:
6

k5054

getch() является частью NCURSES – новые проклятия[^] библиотека. Вы должны добавить -lncurses к вашей директиве по ссылке. Если вы компилируете/связываете из командной строки, это будет выглядеть следующим образом

gcc game.c -o game -lncurses
Если вы используете make то добавьте
LDLIBS = -lncurses
если вы используете IDE, то обратитесь к системной документации о том, как добавить библиотеку в проект.

Я не пробовал, но не думаю, что это возможно. getch() будет работать без использования initscr() Вот простая программа "Hello World" на языке Си
#include <curses.h>

int main()
{
    initscr();   /* initialize ncurses */ 
    mvprintw(5, 10, "Hello World!");  /* print "Hello World at row 5 col 10 */
    getch();     /* wait for user to hit a key */
    endwin();    /* end curses */

    return 0;
}

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


Рейтинг:
1

Richard MacCutchan

Сообщения об ошибках не относятся к показанному вами коду. Где-то еще в вашем коде есть ссылки, показанные в сообщениях об ошибках. Вам нужно проверить документацию, чтобы увидеть, на какие библиотеки нужно ссылаться, чтобы исправить ошибки.


Рейтинг:
0

Rick York

Вы не указали правильные библиотеки для связи с которыми есть эти функции.

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