我正试图在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
那么,我怎么定义它们呢?