【发布时间】:2013-10-22 19:39:41
【问题描述】:
当我这样做时,我得到了这个错误
运行时检查失败 #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 下。
【问题讨论】:
-
你应该提到操作系统等环境
-
你能提供一个SSCCE吗?
-
似乎在 VS 2012 上运行良好
-
该代码看起来不错,只是我预计
tr1标头是<tr1/functional>。 -
在运行之前一切正常。
标签: c++ vector stdvector tr1 stdbind