4

さて、私は当初、Windows専用と思われるいくつかのヘッダーを使用しようとしていましたが、残念ですが、curses.hを使用して必要なものを再現しました。ただし、まったく同じ種類のエラーが引き続き発生します。

"/usr/bin/gmake" -f nbproject/Makefile-Debug.mk QMAKE= SUBPROJECTS= .build-conf
gmake[1]: Entering directory `/home/josh/Projects/Testing grounds/kbhit'
"/usr/bin/gmake"  -f nbproject/Makefile-Debug.mk dist/Debug/GNU-Linux-x86/kbhit
gmake[2]: Entering directory `/home/josh/Projects/Testing grounds/kbhit'
mkdir -p build/Debug/GNU-Linux-x86
rm -f build/Debug/GNU-Linux-x86/main.o.d
g++    -c -g -MMD -MP -MF build/Debug/GNU-Linux-x86/main.o.d -o build/Debug/GNU-Linux-x86/main.o main.cpp
mkdir -p dist/Debug/GNU-Linux-x86
g++     -o dist/Debug/GNU-Linux-x86/kbhit build/Debug/GNU-Linux-x86/main.o  
build/Debug/GNU-Linux-x86/main.o: In function `kbhit()':


/home/josh/Projects/Testing grounds/kbhit/main.cpp:20: undefined reference to `stdscr'
/home/josh/Projects/Testing grounds/kbhit/main.cpp:20: undefined reference to `wgetch'
/home/josh/Projects/Testing grounds/kbhit/main.cpp:23: undefined reference to `ungetch'
collect2: ld returned 1 exit status
gmake[2]: *** [dist/Debug/GNU-Linux-x86/kbhit] Error 1
gmake[2]: Leaving directory `/home/josh/Projects/Testing grounds/kbhit'
gmake[1]: *** [.build-conf] Error 2
gmake[1]: Leaving directory `/home/josh/Projects/Testing grounds/kbhit'
gmake: *** [.build-impl] Error 2

したがって、コードが期待どおりに機能するかどうかは 100% 確信が持てません。これをコンパイルしてテストしようとしています。curses.h のドキュメントによると、キーがキューに入れられていない場合、getch は値 ERR を返すはずです。ここで他に何が必要なのかはよくわかりません。必要なのは、定義が含まれているヘッダーを含めることだけだと思いました。それでも十分ではないようですが、見逃しているものがあるに違いありません。ここに私がコンパイルしようとしている短いテストがあります

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

using namespace std;

bool kbhit()
{
  int ch = getch();
  if(ch != ERR)
  {
    ungetch(ch);
    return true;
  }
  return false;

}

int main() {

  while(!kbhit())
  {
    cout << "no input";
  }
  cout << "Mummy, it's over.";
  return 0;
}
4

4 に答える 4

6

curses ライブラリに対してリンクしていません。-lncursesメイクファイルで実行可能ファイルをリンクする行に指定する必要があります。

于 2012-04-22T10:32:05.683 に答える
2

例:

g++ -o myprogram myprogram.cpp -lncurses
于 2015-03-27T18:04:34.987 に答える
1

また、-lx引数(xはライブラリ)は常にソースファイルとオブジェクトファイルの後に続く必要があることに注意してください。

于 2012-06-19T07:12:13.900 に答える
0

ヘッダーに対してコンパイルするだけでなく、ライブラリに対してリンクする必要もあります。-lncursesリンク コマンドに追加します。( も参照してくださいman ncurses。)

于 2012-04-22T10:32:07.007 に答える