2013-02-02 51 views
0

我想结构MenuItem能够使用HighlightRectOutline。我该怎么做呢?使子类能够使用父类的功能?

Text.h

class Text { 

public: 
      .... 

    void Text::highlightRectOutline(sf::RenderWindow &window, sf::Color color); 

    struct MenuItem { 
     public: 
      Menu::MenuResult action; 
    }; 

HighlightRectOutline:

void highlightRectOutline(sf::RenderWindow &window, sf::Color color) { 
    sf::RectangleShape outlineRect; 

    sf::Vector2f size(Text::getWidth(), Text::getHeight()); 

    outlineRect.setSize(size); 
    outlineRect.setPosition(Text::getPosition()); 

    outlineRect.setFillColor(sf::Color::Transparent); 

    outlineRect.setOutlineColor(color); 
    outlineRect.setOutlineThickness(5); 

    window.draw(outlineRect); 
} 

此项功能是固定的。向下滚动 Menu.h

class Menu { 

    public: 
     static enum MenuResult { Exit, Options, Back, ChangeResolution, Play, Nothing }; 

     MenuResult showMMenu(sf::RenderWindow &window); 
     MenuResult showOMenu(sf::RenderWindow &window); 

    private: 
     MenuResult getMenuResponse(sf::RenderWindow &window); 
     MenuResult handleClick(int x, int y); 
     Menu::MenuResult Menu::handleButtonHover(sf::RenderWindow &window, Text::MenuItem menuItem, int x, int y); 
     std::list<Text::MenuItem> menuItems; 

}; 

handleButtonHover:

Menu::MenuResult Menu::handleButtonHover(sf::RenderWindow &window, Text::menuItem menuItem, int x, int y) { 

    sf::Color color(255, 122, 40); 

    std::list<Text::MenuItem>::iterator it; 

    for(it = menuItems.begin(); it != menuItems.end(); it++) 
    { 
     sf::floatRect menuItemRect = (*it).getRect(); 

     if(menuItemRect.contains(x, y)) 
      menuItem.highlightRectOutline(window, color); 
    } 

    return Nothing; 

} 

这不能使用getRect或菜单项。

帮助将非常感激。

+0

'MenuItem'不是子类。这是一个嵌套类。 –

+0

@sftrabbit:呵呵,“子类”是这样一个可怕的,可怕的词选择,这个错误几乎是可以原谅的... –

回答

0

除了不是已经提到的sftrabbit的子类,您应该声明您的基类的方法是受保护的。通过这种方式,它们对于子类是可见的。