2 qq 33334482 qq_33334482 于 2016.03.27 10:29 提问

c++用栈弹出指针,ERROR C2109

头文件定义模版
#ifndef STACK_H_
#define STACK_H_

template
class Stack
{
private:
int ss;
int top;
T * sp;
public:
Stack(int n);
~Stack();
void push(const T &s);
T & pop();
};

template
Stack::Stack(int n)
{
ss = n;
top = 0;
sp = new T[ss];
}

template
Stack::~Stack()
{
delete[] sp;
}

template
void Stack::push(const T &s)
{
sp[top++] = s;
}

template
T & Stack::pop()
{
return ss[--top];
}
#endif

main 函数
#include
#include "stack.h"
using std::cout;
using std::endl;

int main()
{
const int num = 10;
char * p[num] = { "NO.1 Alex", "NO.2 MIKE", "NO.3 Nike", "NO.4 YIHOO",
"NO.5 Yanjing", "NO.6 Andy", "NO.7 Hello", "NO.8 Wow", "NO.9 Pop", "NO.10 ddd" };
Stack wo(num);
int i;
for (i = 0; i < num; i++)
{
wo.push(p[i]);
}
cout << "弹出的栈:\n";
for (i = 0; i < num; i++)
cout << wo.pop() << endl;
system("pause");
return 0;
}

图片说明

1个回答

qq_33334482
qq_33334482   2016.03.27 11:14
已采纳

栈只是对指针数组里的指针进行压入或弹出操作。问题显然出在Pop函数里
解决方法,现在设计一个 char * out[num[ 指针数组,它的作用是用来存放弹出的指针,再利用一个for循环打印出来
修改后的pop()
template
void Stack::pop( T &s)
{
s = sp[--top];
}
定义的char * out[num]

char * out[num];
cout << "弹出的栈:\n";
for (i = 0; i < num; i++)
{
wo.pop(out[i]);
}
for (i = 0; i < num; i++)
cout << out[i] << endl;

    结果如图![图片说明](https://img-ask.csdn.net/upload/201603/27/1459048472_138537.png)
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
C语言指针实现简单栈
stack:FILO 操作:push 向栈顶压入一个元素 pop 从栈顶弹出元素,pop一个空栈返回-1节点结构体:typedef struct _node { int data; struct _node *next; } Node;栈结构体:typedef struct linkedlist { Node *head; Node *tail; } S
顺序栈(含有栈顶指针,栈底指针)的实现以及编写过程中的一些疑惑的解决
参考文献:数据结构(c语言版)---严蔚敏p44----->p47 代码如下: #include//malloc realloc #include//cin cout using namespace std; typedef int ElemType;/*元素类型*/ #define STACK_INIT_SIZE 100 /*栈存储空间初始化容量*/ #define STACKINCR
栈的指针实现
在算法中要用到多个栈时,最好用链表作为栈的存储结构,即用指针来实现栈。用这种方式实现的栈也称为链栈,见图4。由于栈的插人和删除操作只在表头进行,因此用指针实现栈时没有必要像单链表那样设置一个表头单元。图4 链栈栈的类型说明与单链表类似。 type  TNode=record
浅谈C中的malloc和free (指针与空间 堆与栈)
浅谈C中的malloc和free http://bbs.bccn.net/thread-82212-1-1.html 在C语言的学习中,对内存管理这部分的知识掌握尤其重要!之前对C中的malloc()和free()两个函数的了解甚少,只知道大概该怎么用——就是malloc然后free就一切OK了。当然现在对这两个函数的体会也不见得多,不过对于本文章第三部分的内容倒是有了转折性的认识,所以
怎么理解堆栈指针(Stack Pointer)
如果的堆栈的实现是往上长的(就是说往顶的方向长,其实质是栈底是定死的不能动,入栈的东西只能不断往上叠,这就像在书桌上放书一样,桌底是定死的,所以书只能一本一本地往上堆,往上长),计算机内部的堆栈的实现采取的就是这种模式,所以就得“先修改指针,然后插入数 据,出栈时刚好相反”,因为堆栈指针指向的总是栈顶元素,栈底不能动,所以数据入栈前要先修改指针使它指向新的空余空间然后再把数据存进去,出栈的时候 自
C语言用栈顶和栈底指针实现栈的操作及用栈实现数值转换
栈是一种先进先出(FIFO)的数据结构。。废话不多说,直接贴代码代码参考了小甲鱼的数据机构课程#include &quot;stdafx.h&quot; #include &amp;lt;stdlib.h&amp;gt; #include &amp;lt;stdio.h&amp;gt; #include &amp;lt;math.h&amp;gt; #include &amp;lt;windows.h&amp;gt; #define STACK_INIT_SIZE 100 #d...
C++练习:用指针实现栈
使用C++的指针实现一个简单版的栈
关于局部变量的指针,栈,和栈的释放的几个例子
看几个例子 一个是经典的1+2=65534: 代码如下 #include #include unsigned short *Sum( unsigned char a,unsigned char b) { unsigned short S=0; S=a+b; return &S; } int main() { unsigned short *p=NULL; unsig
用c语言写栈的压入与输出
在写函数程序的时候,一般而言需要注意的是编程的规范的问题,但是自己感觉在这方面做的还很不够,因此,将以下规范写在自己的博客里,希望自己和读者能够重视,并将此规范运用到自己的程序当中。 类、函数和每局类型的名称形如:LikeThis,即单词的首字母大写;变量名形如:likeThis,即第一个单词的首字母小写,第二个单词的首字母大写,私有成员变量名形如:likeThis_,宏名形如:LIKE_THI
关于C++中栈指针和堆指针的使用说明
环境:Windows XP S3、VC++ 6.o 目的:学习C++程序开发语言 使用步骤:下载之后,双击.dsw文件即可打开该示例工程 说明: 在学习《Thinking in C++》一书关于数组声明与定义时,Bruce说如果这样声明一个数组: int b[6] = {0}; Here, the compiler will use the first initializer for the first array element, and then use zero for all the elements without initializers.(意思是说如果这样声明并且定义一个数组,那么编译器会把0赋给第一个数组元素,其它五个元素会赋值0).于是我使用class声明一个类型Test。在这个类中有一个成员方法叫getArray(),在该方法中使用以上方式声明一个数组,然后返回数组的指针,然后在另一个成员方法showPointerOfArray(int*)接收传过来的int指针,在这个方法操作数组。 但是在运行时没有出现我想要的结果,于是其它的方法中测试这样声明方式,却是运行正确的。于是让我很纳闷?带这个问题与本中心庄鹏飞老师讨论之后,发现原来我没有搞清楚在C++中指针分为栈指针和堆指针。参见int* Test::getArray()方法中关于数组的声明以及本人非常详细的说明,那么我想会给学习C++编程的人员带来收获。 结论:C++不是纯粹的OO语言,这是bruce说的。本人在学习过程中确实感觉C++这种语言比Java难得多。不像Java那么直观易学,这可能也就是为什么世界上所有程序员中有20%左右的人是Java程序员,而不是C++程序员的原因吧。 另外,本人使用QT的g++编译器编译通过了,因为是使用记事本手写的,所以完全是Java的书写风格^_^ 把它搞成VC++的工程是为了大家方便学习。。。 学习对象:希望编写效率高于Java应用的程序员。