0

ボックスを含む GTKMM で単純なウィンドウを作成しようとしています。ウィンドウ部分は動作していますが、ボックス コードを動作させることができません。私はこのチュートリアルに従っています

Anjuta (私が使用している IDE) が別のコードを生成したため、チュートリアルは少し古くなっていると思います。ボックスを追加するコードは次のとおりです。

 #include <gtkmm.h>
#include <iostream>
#include "config.h"
 using namespace Gtk;



  int main (int argc, char *argv[])
  {
Gtk::Main kit(argc, argv);


Gtk::Window *main_win = new Gtk::Window (Gtk::WINDOW_TOPLEVEL);
main_win->set_title ("Image-Viewer");

Gtk::Box *box = Gtk::manage (new Gtk::Box());
box ->set_orientation (ORIENTATION_VERTICAL);
box->set_spacing(6);
*main_win -> add(*box);

if (main_win)
{
    kit.run(*main_win);
}
return 0;
 }

チュートリアルのコードでは、ウィンドウは同じ方法では作成されません。以下に示すように、私のコードのウィンドウは、スタックではなくヒープに作成されています。(または、少なくとも [私は C++ を初めて使用します] と思います)。ヒープ内のアイテムはポインターのように使用する必要があることを知っているので、add 関数ではそれを行いました (チュートリアルで説明されているドット表記を使用するのではなく)。このコードを実行すると、次のようなエラーが表示されます。

error:void value not ignored as it out to be

エラーは、ウィンドウで呼び出されている add メソッドに関連しています。誰かが私が間違っていることを教えてもらえますか? ありがとう

4

1 に答える 1

2

この命令:

Gtk::Window *main_win = new Gtk::Window (Gtk::WINDOW_TOPLEVEL);

へのポインタを宣言しますGtk::Window。後で、次のことを行います。

*main_win -> add(*box);

operator ->基本的に、ポインターを既に逆参照した後に適用しようとするため、これは正しくありません。main_winこの逆参照の結果は、ポインター自体ではなく、 type のオブジェクトへの参照Gtk::Windowです。

この問題を解決するには、余分な逆参照を削除します。

main_win -> add(*box);

ノート:

Gtk::Windowとそのメンバー関数はわかりませんが、引数としてポインターを受け入れるadd()場合は、逆参照もすべきではありません。add()box

于 2013-03-28T23:29:44.347 に答える