经济码农 2016-03-27 02:29 采纳率: 50%
浏览 1493
已采纳

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条回答

  • 经济码农 2016-03-27 03: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)
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 矩阵加法的规则是两个矩阵中对应位置的数的绝对值进行加和
  • ¥15 活动选择题。最多可以参加几个项目?
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
  • ¥15 vs2019中数据导出问题
  • ¥20 云服务Linux系统TCP-MSS值修改?
  • ¥20 关于#单片机#的问题:项目:使用模拟iic与ov2640通讯环境:F407问题:读取的ID号总是0xff,自己调了调发现在读从机数据时,SDA线上并未有信号变化(语言-c语言)
  • ¥20 怎么在stm32门禁成品上增加查询记录功能
  • ¥15 Source insight编写代码后使用CCS5.2版本import之后,代码跳到注释行里面
  • ¥50 NT4.0系统 STOP:0X0000007B
  • ¥15 想问一下stata17中这段代码哪里有问题呀