C++ 回调函数混淆了参数?

C++ 回调函数混淆了参数?,c++,callback,containers,sfml,C++,Callback,Containers,Sfml,我有一个sfml窗口容器,它似乎在工作,但是GLViewport的大小是错误的,我认为这是因为传递了错误的sf::window 下面是一个添加到窗口的函数:它获取有关sfml窗口的一些信息 int WindowContainer::PushBack(WindowData& data) { if(data.WindowSettingsOK() && data.VideoModeOK()){ mWindowVector.resize(mWindowV

我有一个sfml窗口容器,它似乎在工作,但是GLViewport的大小是错误的,我认为这是因为传递了错误的sf::window

下面是一个添加到窗口的函数:它获取有关sfml窗口的一些信息

int WindowContainer::PushBack(WindowData& data)
{
    if(data.WindowSettingsOK() && data.VideoModeOK()){

        mWindowVector.resize(mWindowVector.size() + 1);
        mDisplayFuncVector.resize(mWindowVector.size());
        mInputFuncVector.resize(mWindowVector.size());

        mWindowVector.at(mWindowVector.size() - 1) = new sf::Window();
        mWindowVector.at(mWindowVector.size() - 1)->Create(data.VideoMode(), data.Title(), data.Style(), data.Settings());
        mWindowVector.at(mWindowVector.size() - 1)->SetPosition(data.PositionX(), data.PositionY());

        mDisplayFuncVector.at(mWindowVector.size() - 1) = nullptr;
        mInputFuncVector.at(mWindowVector.size() - 1) = nullptr;

        return 0;
    }
    else{
        PrintError(ErrorMessageType::BadSettings);
        return 1;
    }
}
或者,可以调用此函数来设置显示和输入函数回调:

int WindowContainer::PushBack(WindowData& data, function_p displayFunc, function_p inputFunc)
{
    int return_val = PushBack(data);
    mDisplayFuncVector.at(mWindowVector.size() - 1) = displayFunc;
    mInputFuncVector.at(mWindowVector.size() - 1) = inputFunc;

    return return_val;
}
然后,当窗口需要
.Display()
'ing时,调用此函数:

void WindowContainer::ProcessDisplay()
{
    for(unsigned int i = 0; i < mWindowVector.size(); i ++){
        if(mDisplayFuncVector.at(i) != nullptr){
            mDisplayFuncVector.at(i)(*mWindowVector.at(i), mClock, (const void*&)mExternalDrawingDataPointer);
        }
        mWindowVector.at(i)->Display();
    }
}
Container.Access(int)
此功能:

const sf::Window*& WindowContainer::Access(unsigned int index)
{
    if(index > mWindowVector.size()){
        PrintError(ErrorMessageType::IndexOutOfRange);
    }
    else{
        return (const sf::Window*&)mWindowVector.at(index);
    }
    return (const sf::Window*&)mWindowVector.at(0);
}

再次感谢,我确信我在某个地方犯了一个错误,但我无法发现它。

我一直在思考这个问题,并且怀疑如果在没有调用Display()同步所有内容的情况下将多个对象向后推,openGL会与它所绘制的窗口相混淆

我还未对此进行测试和确认


编辑窗口容器现在可以工作了。它与callback functions参数无关。

显示函数的原型是什么?在main.cpp中,我有一个函数:
void display(sf::Window&Window,const sf::Clock&Clock,const void*&data)这就是你要问的吗?也许你可以发布问题是什么,以及你为其他有类似问题的人找到的解决方案。这是个好主意,但我认为可能太具体了,不值得发布。我怀疑这与sfml windows的工作方式有关,但我不能确定。
const sf::Window*& WindowContainer::Access(unsigned int index)
{
    if(index > mWindowVector.size()){
        PrintError(ErrorMessageType::IndexOutOfRange);
    }
    else{
        return (const sf::Window*&)mWindowVector.at(index);
    }
    return (const sf::Window*&)mWindowVector.at(0);
}