2016-11-29 3 views
0
const int bookBoatNum = 10; 
Wt::WPushButton *buttonBookBoat[bookBoatNum]; 
Wt::WDialog *dialogBookBoat[bookBoatNum]; 

for (int i = 1; i < bookBoatNum; i++){ 
    dialogBookBoat[i] = new Wt::WDialog("Book Boat"); 
    buttonBookBoat[i] = new Wt::WPushButton(); 

    buttonBookBoat[i]->clicked().connect(std::bind([&dialogBookBoat,i]() { 
     dialogBookBoat[i]->show(); 
    })); 
} 

プログラムがコンパイルされ、実行されます。 WPushButtonオブジェクトをクリックすると、メモリエラーのために最後の3行目が原因でクラッシュします。 buttonBookBoatとdialogBookBoatがオブジェクトの配列ではなく単一のオブジェクトである場合、このコードは完全に機能します。 show()はダイアログオブジェクトを表示するメソッドです。配列のラムダ関数を使用したメモリエラー

このエラーは私を夢中にしてくれていて、私の人生はこのコード(実際はありません)に沿っています。

+0

ボタンを押したときに、buttonBookBoatとdialogBookBoatの両方が確実に存在しますか?彼らが両方ともグローバルであれば、それはありますが、あなたはどの範囲を持っているのかは言いません。 –

+0

Jerry Jeremiahはい、どちらも存在します。私はアレイとは対照的に、単一のオブジェクトで全く同じコードを試してみました。 – Jake

答えて

0
const int bookBoatNum = 10; 
Wt::WPushButton *buttonBookBoat[bookBoatNum]; 
Wt::WDialog *dialogBookBoat[bookBoatNum]; 

for (int i = 1; i < bookBoatNum; i++){ 
    dialogBookBoat[i] = new Wt::WDialog("Book Boat"); 
    Wt::WDialog * tempDialog=new Wt::WPushButton(); 
    buttonBookBoat[i] = tempDialog; 

    buttonBookBoat[i]->clicked().connect(std::bind([tempDialog]() { 
     tempDialog->show(); 
    })); 
} 

私はdialogBookBoatは配列なので、関数呼び出しの後には存在しないと思います。

+0

Wt :: WDialog * tempDialog =新しいWt :: WPushButton(); buttonBookBoat [i] = tempDialog;これらの2行は間違っていますが、私はそれらを修正し、コードはうまくいきました!ありがとうございました – Jake

関連する問題