c++ - 如何在 C++ 中检查未定义的变量
问题描述
我的 C++ 项目中有这段代码:
class StackNode{
public:
StackNode(){
this->varName = NULL;
this->down = NULL;
}
char * varName;
StackNode * down;
};
class Stack{
public:
StackNode * head;
Stack(){
this->head == NULL;
}
bool IsEmpty(StackNode * node){
if(node == NULL){
return true;
}
return false;
}
};
..
..
..
void ST::localVariableStack(StNode * node){
Stack * stack = new Stack();
StNode * temp = node;
checkUndeclaredVarible(temp, stack);
while (temp->left){
checkUndeclaredVarible(temp->left, stack);
temp = temp->left;
}
}
void ST::checkUndeclaredVarible(StNode * node, Stack * stack){
if(ifInteger(node)){
if(node->declared){
stack->AddUnite(node->VarName);
}else{
if(!isItExiteInStack(node, stack)){
this->errRecovery->errQ->enqueue(node->lineno, node->colno, "Undeclared Variable : ", node->VarName);
}
}
}
}
bool ST::isItExiteInStack(StNode * node, Stack * stack){
StackNode * temp = new StackNode();
temp = stack->head;
while(!(stack->IsEmpty(temp))){
if(strcmp(temp->varName, node->VarName) == 0){
return true;
}
temp = temp->down;
}
return false;
}
问题是当我调用stack->isempty(temp)
temp 对象转到isempty
函数时,在 temp 为空的情况下,尽管有一个默认构造函数。当签(node == NULL)
入isempty
函数时,它需要 afalse
并返回false
而不是true
,所以在这个函数之后会因为他的行为像非空对象而中断。
解决方案
推荐阅读
- swiftui - SwiftUI:NavigationLink 和列表项中的显示工作表按钮同时工作
- asp.net - 将字符串列表传递给 F# asp.Net api
- azure - 针对 Azure DevOps 对 Puppeteer 进行身份验证
- android - 为什么 ViewPager 重新打开后速度很慢?
- powerbi - Date 列中有 NULL 值,在 power bi 视觉中我的要求是 Date 列不应该为空
- ios - 如何通过脚本将 *.app 文件安装到真实设备?
- git - 如何删除github上特定提交中的一行?
- asp.net - 如何将数据从引导表单传递到 asp .net 核心剃须刀页面中的 mockemployeerepo
- docker - WSL2 / docker desktop:重新安装机器后如何重新附加 docker-desktop-data vhdx?
- spring-boot - 带有 Azure AD 的 Spring Boot 应用程序抛出回复 URL 不匹配