首页 > 解决方案 > 如何在 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,所以在这个函数之后会因为他的行为像非空对象而中断。

标签: c++pointersstackundefined

解决方案


推荐阅读