鱼C论坛

 找回密码
 立即注册
查看: 847|回复: 2

[已解决]c++ Stack 栈类 最简单的类型 出了点问题

[复制链接]
发表于 2020-6-21 10:13:07 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include<iostream>
template <class T>
class Stack
{
public:
        Stack(unsigned int size)
        {
                this->size=size;
                data=new T[size];
                sp=0;
        }
        ~Stack();
        void push(T dat)
        {
                data[sp++]=dat;
        }
        T pop()
        {
                if(sp-1<0)
                {
                        std::cout << "栈空!\n";
                        
                }
                else
                {
                        return(data[--sp]);
                }
        }
private:
        unsigned int size;
        unsigned int sp;
        T *data;
};
int main()
{
        Stack<int> intStack(30);
        int i;
        for(i=0;i<20;i++)
                intStack.push(i);
        for(i=0;i<20;i++)      //错误定位这一行      undefined reference to Stack<int>::"stack()'

                std::cout << intStack.pop();
}
求指导
最佳答案
2020-6-21 12:04:28
不清楚你用的啥编译器,反正我改了下你的,在我的IDE中能运行
  1. #include <iostream>

  2. using namespace std;
  3. template <class T>
  4. class Stack
  5. {
  6. public:
  7.     Stack(unsigned int size)
  8.     {
  9.         this->size = size;
  10.         data = new T[size];
  11.         sp = 0;
  12.     }
  13.     ~Stack(){}// 你这行有问题,还有我不明白你为啥不用using namespace std;
  14.     void push(T dat)
  15.     {
  16.         data[sp++] = dat;
  17.     }
  18.     T pop()
  19.     {
  20.         if (sp - 1<0)
  21.         {
  22.             cout << "栈空!\n";
  23.             // return NULL;
  24.         }
  25.         else
  26.         {
  27.             return(data[--sp]);
  28.         }
  29.     }
  30. private:
  31.     unsigned int size;
  32.     unsigned int sp;
  33.     T *data;
  34. };
  35. int main()
  36. {
  37.     Stack<int> intStack(30);
  38.     int i;
  39.     for (i = 0; i<20; i++)
  40.         intStack.push(i);
  41.     for (i = 0; i < 20; i++)      //错误定位这一行      undefined reference to Stack<int>::"stack()'
  42.         cout << intStack.pop() << endl;
  43. }
复制代码

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-6-21 12:04:28 | 显示全部楼层    本楼为最佳答案   
不清楚你用的啥编译器,反正我改了下你的,在我的IDE中能运行
  1. #include <iostream>

  2. using namespace std;
  3. template <class T>
  4. class Stack
  5. {
  6. public:
  7.     Stack(unsigned int size)
  8.     {
  9.         this->size = size;
  10.         data = new T[size];
  11.         sp = 0;
  12.     }
  13.     ~Stack(){}// 你这行有问题,还有我不明白你为啥不用using namespace std;
  14.     void push(T dat)
  15.     {
  16.         data[sp++] = dat;
  17.     }
  18.     T pop()
  19.     {
  20.         if (sp - 1<0)
  21.         {
  22.             cout << "栈空!\n";
  23.             // return NULL;
  24.         }
  25.         else
  26.         {
  27.             return(data[--sp]);
  28.         }
  29.     }
  30. private:
  31.     unsigned int size;
  32.     unsigned int sp;
  33.     T *data;
  34. };
  35. int main()
  36. {
  37.     Stack<int> intStack(30);
  38.     int i;
  39.     for (i = 0; i<20; i++)
  40.         intStack.push(i);
  41.     for (i = 0; i < 20; i++)      //错误定位这一行      undefined reference to Stack<int>::"stack()'
  42.         cout << intStack.pop() << endl;
  43. }
复制代码

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-22 10:01:02 | 显示全部楼层
_匆匆来也 发表于 2020-6-21 12:04
不清楚你用的啥编译器,反正我改了下你的,在我的IDE中能运行

Soga 原来是 析构器没定义,大意了  谢谢老哥
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-8-6 02:11

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表