0

私のエラー

gridlist.h: In constructor ‘GridList::GridList(WINDOW*, int, int, int, int, int)’:
gridlist.h:11:47: error: no matching function for call to ‘Window::Window()’
gridlist.h:11:47: note: candidates are:
window.h:13:3: note: Window::Window(WINDOW*, int, int, int, int, int)

私のコード

GridList(WINDOW *parent = stdscr, int colors = MAG_WHITE, int height = GRIDLIST_HEIGHT, int width = GRIDLIST_WIDTH, int y = 0, int x = 0) 
: Window(parent, colors, height, width, y, x) {
    this->m_buttonCount = -1;
    m_maxButtonsPerRow = ((GRIDLIST_WIDTH)/(BUTTON_WIDTH+BUTTON_SPACE_BETWEEN));
    this->m_buttons = new Button *[50];
    refresh();
}

正確に何を伝えようとしているのか、何を間違っているのか、少しわかりません。クラスに正しい変数型と正しい数のパラメーターを渡しています。ただし、パラメーターなしで呼び出そうとWindow::Window()しています。助けてくれてありがとう。

クラス Button は問題なくコンパイルされ、ほとんど同じです。

Button(WINDOW *parent = 0, int colors = STD_SCR, int height = BUTTON_WIDTH, int width = BUTTON_HEIGHT, int y = 0, int x = 0) 
: Window(parent, colors, height, width, y, x) {
            this->refresh();
        }
4

2 に答える 2

3

あなたのGridListクラスには type のメンバー変数がありますWindow。すべてのメンバーは (指定されていない場合はデフォルトで)コンストラクターの本体の前に初期化されるため、実際には次のようになります。

GridList::GridList (...)
 : Window(...), m_tendMenu() //<--here's the problem you can't see

メンバー変数はデフォルトで初期化されていますが、Windowクラスにはデフォルトのコンストラクターがないため、問題が発生しています。これを修正するには、メンバー初期化子でメンバー変数を初期化します。

GridList::GridList (...)
 : Window(...), m_tendMenu(more ...), //other members would be good here, too

Buttonクラスが機能する理由は、 type のメンバーがないためです。そのためWindow、デフォルトで初期化できない場合は何も初期化されません。

于 2012-07-21T00:13:14.147 に答える
-2

initlizer list でコンストラクターを呼び出すのはなぜですか? 通常、そこでメンバー変数を初期化するので、タイプ window のメンバー変数が存在します。

GridList(WINDOW *parent = stdscr, int colors = MAG_WHITE, 
  int height = GRIDLIST_HEIGHT, int width = GRIDLIST_WIDTH, int y = 0, int x = 0)
  : m_window(parent, colors, height, width, y, x) { }
于 2012-07-20T23:26:41.610 に答える