当我这样做时,我得到了这个错误
运行时检查失败 #0 - ESP 的值未在函数调用中正确保存。这通常是调用使用一种调用约定声明的函数和使用另一种调用约定声明的函数指针的结果。
打电话时dutyStack[0]();
。但是,如果我添加dutyStack.reserve(10);
或者向量中只有一个元素,则不会出现错误。我怀疑在调整矢量大小时复制元素时发生了一些事情,但我真的不知道。
#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下。