Проблемы при создании стека в C ++ с автоматически ссылающимися классами - PullRequest
0 голосов
/ 02 мая 2011

Я делаю стек в C ++ для управления математическими операциями с инфиксами, постфиксами и префиксами. Я использую 2 класса, один называется Node (класс с автоматическими ссылками), а другой - Stack. В Node у меня есть 2 свойства, одно из которых ID (int, только для тестов) и element (это char *). В стеке я управляю всеми узлами в 2 стеках, один стек управляет операндами (stack1), а другой стек управляет операторами (stack2). Если я использую выражение: «53 + 72-30 / 38 * 912», идея состоит в том, что в стеке, например, я должен иметь [*, /, -, +] и идентификаторы для каждого объекта [4, 3 2, 1], но результат для stack2 выглядит следующим образом [*, *, *, *], но идентификаторы для каждого из них хороши [4, 3, 2, 1]

Я думаю, что проблема должна быть с символом *, но я не знаю, как ее решить, не могли бы вы помочь мне, пожалуйста?

Заранее спасибо!

<code>Stack.cpp</p>

<p>//this is inside of a loop that goes trough a char* (named expr)
char tmp[i] = expr[i];
char op[] = {tmp, '\0'}; //I do this because the constructor of Node requieres a char*,
//and it is because I use the class Node to manage the stack of operands, which are char*
//for example, '983' (I do not use int for this case, but I also may create a template... 
//but I want to know how to make it with char*)
this->addOperatorToStack2(op);
Stack.cpp

//The method that adds an operator (a new node) to the stack
void Stack::addOperatorToStack2(char *op){
    Node *tmpNode = new Node(op);

    if(!currentNode){
        currentNode = tmpNode;
    }
    else{
        tmpNode->nextNode = currentNode;
        currentNode= tmpNode;
    }
}
Node.h

#ifndef NODE_H
#define NODE_H

class Node{

      friend class Stack;

      public:
              Node(char *);
              char* getElement() const;

      private:
              char *element;
              Node *nextNode;
              static int counter;
              int id;
};

#endif
Node.cpp

#include "Node.h"

Node::Node(char *element){
    this->nextNode = 0;
    this->element = element;

    counter++;
    id = counter;
}

char* Node::getElement()const{
    return this->element;
}

int Node::counter= 0;

1 Ответ

1 голос
/ 02 мая 2011

Каждый узел должен иметь свое значение элемента:

class Node{

      private:
              char element[MAXSIZE];
};

И поэтому ваш конструктор Node::Node(const char *element) должен создать свою собственную копию значения - strncpy или что-то подобное.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...