当我这样做时,我会收到此错误



调用dutyStack[0]();时。但是,如果我添加dutyStack.reserve(10);或 vector 中只有一个元素,则不会出现错误。我怀疑在调整 vector 大小时复制元素时发生了什么事,但我真的不知道。

#include "stdafx.h"
#include <iostream>
#include <vector>
#include <functional>

using namespace std;
class Class1
{
public:
    void duty1(){cout<<"duty1";}
    void duty2(){cout<<"duty2";}
};

int _tmain(int argc, _TCHAR* argv[])
{
    vector<tr1::function<void()>> dutyStack;
    Class1 myclass;

    dutyStack.push_back( tr1::bind(&Class1::duty1, myclass) );
    dutyStack.push_back( tr1::bind(&Class1::duty2, myclass) );

    dutyStack[0]();
    dutyStack.erase(dutyStack.begin());
}

我在Visual Studio 2008,Windows 7下工作。

最佳答案

我的环境与您的环境完全相同(Win7,VS 2008)。
我刚刚编译并成功执行了您的代码。

在我看来,您可能需要重新创建项目,因为您可能需要调用常规或类似内容进行更改:



..so重新创建项目很简单,检查这是否是您的问题。如果不是这样,我敢打赌,您的某些头文件已损坏。

10-06 12:58