要敢于在实践项目上练习,
可能老师没讲清楚题意,我理解是 这个括号匹配是按 运算时候的括号 来要求的,即 成对的括号内才能套着成对的括号。比如【7+(6+(2+【1+2】))】 而不能 【(】【)】 这样就无法运算了
visit应该只是个函数名吧,具体函数内容自己看需求情况去定义
.h 文件和.cpp 文件都要加
括号的匹配指的应该是按照成对原则出现进行匹配,出现的顺序是有先后顺序的,按照中文中括号的使用进行判断的
无法理解问题
?是因为越界了
你不把代码贴出来怎么回答你
画个图你理解一下
代码都不贴怎么告诉你原因啊
个人理解是系统申请内存后将内存的的首地址赋值给m_pBuffer,m_pBuffer再赋值给p
A.B则A为对象或者结构体;(不用分配内存)
A->B则A为指针,->是成员提取,A->B是提取A中的成员B,A只能是指向类、结构、联合的指针;(要分配内存)
用友元
cout<<"虚函数是在用基类实例化一个派生类对象后,用完释放内存不彻底导致内存泄漏的背景下使用的。你看看,这里有没有这种情况?没有的话,就不需要了。"<<endl;
我遇到类似的,后来发现是pop函数那判空时处理异常的问题。不知道是不是和你一个问题。
// myself void bracketMatch1(const char* str) { MyStack<char>* pMatch = new MyStack<char>(30); char currentNeed = 0; for (int i = 0; i < strlen(str); i++) { if (str[i] == currentNeed) { if (pMatch->pop(currentNeed) == 0) currentNeed = 0; // 1. 通过pMatch更新当前待匹配括号 // 2. pMatch为空时,需给当前待匹配括号置零 } else { if (currentNeed != 0) pMatch->push(currentNeed); currentNeed = str[i] == '(' ? ')' : (str[i] == '[' ? ']' : 'k'); } } pMatch->stackEmpty()&¤tNeed==0 ? cout << "Yes" << endl : cout << "No" << endl; delete pMatch; pMatch = nullptr;}
如果你要在在Stack.h文件里面定义重载,你当然要在这个文件引入头文件和命名空间。
如果cout都没有定义,怎么实现重载?
栈顶当前指的是空指针,所以得先赋值,再上浮
部分编译器不支持类模板分文件定义,把.cc全部合并到.h下就好了
不是 这是c++的
兄弟,找着你的错误了,在for循环里,每次拿取的str[i]和currentNeed相比较,如果不相等,就需要把str[i]压入栈pStack中,到这一步你还是正确的。但是接下来当currentNeed!=0时,需要把currentNeed压入栈pNeedStack中时,你却压入到了pStack栈中了。
只需要把pStack->push修改为pNeedStack->push即可。
其实说白了一个栈就足够解决这个问题了,老师写这些应该是为了后续扩展的需要吧
Coordinate是一个类啊,老师c++教程中的案例,现在拿出来用了。
这就是个bool类型的变量啊,你改成a,i等等别的名字都可以啊
只有指针才能使用->
这个输出的格式是在Coordinate中进行的运算符重载,最后不使用这个类了,针对特定类所做的重载也就没有使用。
调试一下,按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处,看不懂时双击下一行,直到能看懂为止。
没有代码的话看不出来哪里错了,一个可能的原因是坐标类的构造函数没有赋初值导致编译器随机给你赋了一个值(我也是小白,这是个人猜测
你需要先实例化一个Coodinate对象,在实例化的时候就会要求你把x和y输入进去了,然后pop和push需要调用的参数都是实例化的对象而不是x和y;