gpt4 book ai didi

c++ - 使用自动引用类在 C++ 中创建堆栈时出现问题

转载 作者:行者123 更新时间:2023-11-28 08:20:57 24 4
gpt4 key购买 nike

我正在用 C++ 创建一个堆栈来管理中缀、后缀和前缀数学运算。我使用 2 个类,一个称为 Node(自动引用类),另一个称为 Stack。在 Node 中我有 2 个属性,一个是 ID(一个 int,仅用于测试)和一个元素(是一个 char*)。在堆栈中,我管理 2 个堆栈中的所有节点,一个堆栈管理操作数 (stack1),另一个堆栈管理运算符 (stack2)。如果我使用表达式:“53+72-30/38*912”,我的想法是,例如在 stack2 中我应该有 [ *,/, -, +] 和每个对象的 ID [4, 3, 2, 1],但是 stack2 的结果如下 [ *, *, *, *] 但每个的 id 都很好 [4, 3, 2, 1]

我认为问题一定出在 char* 上,但我不知道如何解决,你能帮帮我吗?

提前致谢!

Stack.cpp<p></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);
</p>

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;

最佳答案

每个节点应拥有其元素值:

class Node{

private:
char element[MAXSIZE];
};

所以你的构造函数 Node::Node(const char *element) 应该制作它自己的值拷贝 - strncpy 或类似的一些。

关于c++ - 使用自动引用类在 C++ 中创建堆栈时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5851542/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com