0

CodeLite を使用して Fltk プロジェクトを作成しています。すべて問題ないように見えますが、F5 キーを押してデバッグすると、「Program Received signal SIGSEGV」のヒントで常にクラッシュしました。コールスタックは次のとおりです。

0 0x00401c66 Fl_Widget::Fl_Widget(int, int, int, int, char const*)
1 0x0040a6b1 Fl_Group::Fl_Group(int, int, int, int, char const*)
2 0x004097bf Fl_Window::Fl_Window(int, int, char const*) 3 0x00401415 メイン

CodeBlocks を使用してコードを正常に作成したので、コードに問題はないと確信しています。

#include <FL/Fl.H>
#include <FL/Fl_Window.H>
#include <FL/Fl_Button.H>
using namespace std;

//--------------------------------------------
void but_cb( Fl_Widget* o, void*  ) {
Fl_Button* b=(Fl_Button*)o;
b->label("Good job"); //redraw not necessary

b->resize(10,150,140,30); //redraw needed
b->redraw();
}

//--------------------------------------------  
int main() {
Fl_Window win( 300,200,"Testing" );
win.begin();
   Fl_Button but( 10, 150, 70, 30, "Click me" );
win.end();
but.callback( but_cb );
win.show();
return Fl::run();
}

ビルドログ、おそらく役立つ:

C:\windows\system32\cmd.exe /c "mingw32-make.exe -j 4 -e -f "CL_TESL_wsp.mk"" ----------プロジェクトのビルド:[ HelloFltk - デバッグ ]- ---------" mingw32-make.exe[1]: ディレクトリG:/CPP/CL_TESL/HelloFltk' g++ -o ./Debug/HelloFltk @"HelloFltk.txt" -L. -LG:/MinGW-4.7.1/lib/ -LG:/FLTK/fltk- 1.3.2/lib/ -LG:/FLTK/fltk-1.3.2/ -LG:/MinGW-4.7.1/lib/ -lgdi32 -lfltk -lfltk_forms -lfltk_gl -lfltk_images -lfltk_z -lgdi32 -lole32 -luuid -luser32 -lcomctl32 mingw32-make.exe[1]: Leaving directoryG:/CPP/CL_TESL/HelloFltk に入る ' 0 エラー、0 警告

新たな局面!! 今日、CodeBlocksを最新バージョンに更新しましたが、同じ問題が発生しました.MinGWのバージョンに関連していると思います...MinGWの新しいバージョンを使用してFLTKを作り直しましたが、どちらも機能しません... CodeLite の MinGW パスを古いものに変更する必要がありますが、それは機能します...最新バージョンを使用できなかったのはなぜですか?

4

1 に答える 1

0

このチュートリアルに従おうとしたと思われます。

http://www3.telus.net/public/robark/#labels

そのリンクの下部に、試した例が良くない理由が説明されています。

このプログラムには大きな問題があります。ボタンをクリックします。次に、ウィンドウを移動するか、最小化/復元して強制的に再描画してみてください。ラベル表示のゴミに注目!FLTK は、存在しないポインターを参照しようとしています。良くない

私は自分で試しませんでした。同じチュートリアルで修正が提供されています。

コールバック関数の行を o->label(newcap); から変更するとします。

o->copy_label(newcap);

頑張れ、エラン

于 2013-04-30T19:20:29.143 に答える