类需要彼此的定义。如何定义它们?

时间:2016-08-10 18:49:32

标签: c++ class definition

我正试图在Allegro中制作gui(按钮等),但我遇到了一些问题。 到目前为止,有三个类:屏幕,按钮,标签。 (简化)代码如下所示:

gui.h:

class button;
class label;
class screen;    

class screen {
    typedef boost::variant< button*, label* > gui_element;
    std::vector<gui_element> elements;

public:
    ALLEGRO_COLOR background_col;
    void add(button *button) {
        elements.push_back(button);
    }
    void add(label *label) {
        elements.push_back(label);
    }

    class draw_visitor : public boost::static_visitor<>
    {
    public:
        void operator()(button *button) const
        {
            button->draw(); //C2027: use of undefined type 'button'
                            //C2227: left of 'draw' must point to class/struct/union/generic type
        }
        void operator()(label *label) const
        {
            label->draw();  //Same here
        }

    };

    void draw() {
        al_clear_to_color(background_col);

        for (u_int i = 0; i < elements.size(); i++) {
            boost::apply_visitor(draw_visitor(), elements[i]);
        }

        al_flip_display();
    }
};
#include "button.h"
#include "label.h"

button.h:

class button {
public:
    button(screen *scr)
    {
        scr->add(this);
    }
    void draw() {
    //draw the button
    }
};

(label.h是相同的,但有标签)

此代码会出现一些错误(请参阅代码中的注释)。

在#includes之后移动屏幕的定义会产生类似的错误,但是在按钮和标签的构造函数中: scr->add(this)使用未定义类型'screen'; ' - &gt; add'左边必须指向class / struct / union / generic type

那么,我怎么定义它们呢?

0 个答案:

没有答案