Как проверить неопределенную переменную в C ++ - PullRequest
0 голосов
/ 16 мая 2018

У меня есть этот код в моем проекте на 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), временный объект переходит к функции isempty, в ситуации, когда temp пуст, хотяесть конструктор по умолчанию.При проверке (node == NULL) в функции isempty он принимает false и возвращает false, а не true, поэтому после этого функция сломается, потому что он действует как непустой объект.

...