0

私のフレームワーク クラスでは、次のベクトルを宣言しています。std::vector<sf::Drawable*> drawableStack;

drawableStack がすべていっぱいになったら、次のようなループですべてのオブジェクトを描画します。

void Framework::drawScreen()
{
    window->clear();

    std::vector<sf::Drawable*>::iterator itr;

    for(itr=drawableStack.begin(); itr!=drawableStack.end(); itr++)
    {
        window->draw(itr);
    }

    window->display();
}

window はヘッダーで宣言されてsf::RenderWindow* window;おり、描画関数はsf::RenderWindow::draw(const sf::Drawable&)であり、エラーはerror: no matching function for call to 'sf::RenderWindow::draw(std::vector<sf::Drawable*>::iterator&'です。どうする?

4

2 に答える 2

1

イテレータを逆参照するのを忘れました。この行を変更します。

window->draw(itr);

window->draw(**itr);

2 回逆参照する必要があります。1 回目は iterator からsf::Drawable*it が指すものに取得し、2 回目はベクトルがポインターを保持し、関数が引数として参照を受け取るためです。

于 2013-07-19T21:03:20.773 に答える
0

イテレータとポインタの両方を逆参照する必要があります。

window->draw(**itr);
于 2013-07-19T21:04:06.313 に答える