当我这样做时,我会收到此错误
调用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重新创建项目很简单,检查这是否是您的问题。如果不是这样,我敢打赌,您的某些头文件已损坏。