【发布时间】:2018-05-09 03:43:37
【问题描述】:
我有一个名为btnTimeIn 的按钮调用identifyStaff() 函数:
public: System::Void btnTimeIn_Click(System::Object^ sender, System::EventArgs^ e) {
this->identifyStaff();
}
我的identifyStaff() 函数正在检查员工/用户是否被识别。如果未识别,则会出现一个带有确定按钮的消息框,如果单击了ok 按钮,则将再次调用identifyStaff() 函数。
private: System::Void identifyStaff() {
uint32 flag = 0; // 1:accept or 0:reject
... some code beign skip
flag = 1;
... some code being skip
// accept or if finger print was indentified
if (flag == 1){
// Open confirmation form
}
else
{
if (MessageBox::Show("Staff unidentified. Please rescan again.",
"Timestamp", MessageBoxButtons::YesNo,
MessageBoxIcon::Question) == System::Windows::Forms::DialogResult::Yes) {
this->identifyStaff();
}
else {
// do nothing. Close the MessageBox
}
}
}
现在这是我运行应用程序时所做的:
- 点击“时间”按钮
- 我将未注册的手指放入生物识别中
- 消息框出现重试按钮以重试。
- 我点击消息框中的重试/确定按钮
- 再次将手指放入生物特征(这次是已注册的手指)
- 识别成功,确认表单打开。
- 我关闭确认表单,然后应用程序崩溃。
我还是 C++ 的初学者,还没有深入研究递归函数。
那么,为什么我会收到此错误/为什么我的应用会崩溃?
提前感谢您分享您的知识。
更新 我在帖子中更新了我的代码以显示标志变量。
【问题讨论】:
-
@Someprogrammerdude 在 OP 对事件的描述中似乎并非如此。
-
这就是我想要做的,如果可能的话,无限递归。
-
至少,您需要提供崩溃堆栈。
-
您尝试做的可能不是正在发生的事情?如果您在调试器中逐行执行代码,进入递归调用,它是否按预期工作?
identified会被设置吗? -
如果 OP 的描述是正确的('显示确认表'),递归很可能是红鲱鱼。这就是为什么崩溃堆栈是典型的原因。
标签: c++ function recursion visual-c++ clr