标题:顺序栈问题(unresolved external symbol)
取消只看楼主
duwn124
Rank: 1
等 级:新手上路
帖 子:31
专家分:0
注 册:2010-8-10
结帖率:77.78%
已结贴  问题点数:20 回复次数:4 
顺序栈问题(unresolved external symbol)
求助“unresolved external symbol”问题,小弟最近初学C++,在写顺序栈的时候遇到这个问题,请各位高人帮忙啊!代码我是分开放的,共有三个文件,ArrayStack.h,ArrayStack.cpp,main.cpp
程序代码:
//ArrayStack.h
//顺序栈类的定义
template<class T>
class ArrayStack
{
        int size;
        int tos;
        T* contain;
    public:
        ArrayStack():size(0),tos(-1),contain(NULL)
        {
        }
        ArrayStack(int MaxSize);
        void Push(T element);
        T Pop();
        bool IsEmpty();
};//main.cpp
#include "ArrayStack.h"
#include "iostream"

using namespace std;
#define MaxSize 10
//顺序栈功能为完成括号匹配,
int main()
{
    ArrayStack<char> small(MaxSize);
    char a;
    do
    {
        cin>>a;
        switch(a)
        {
        case '(':
            small.Push(a);
            break;
        case ')':
            if(!small.IsEmpty())
            {
                small.Pop();
                break;;
            }
            if(small.IsEmpty())
            {
                cout<<"匹配错误!"<<endl;
                exit(0);
                break;
            }
        }
    }while (a != '0');
    if(small.IsEmpty())
    {
        cout<<"匹配正确!"<<endl;
    }
    else
    {
        cout<<"匹配错误!"<<endl;
    }
    return 0;   
}
//ArrayStack.cpp

#include "ArrayStack.h"
#include "assert.h"

//设定顺序栈的最大容量
template<class T>
ArrayStack< T >::ArrayStack(int MaxSize)
{
    size = MaxSize;
    tos = -1;
    contain = new T[size];
}

//指定元素入栈
template<class T>
void ArrayStack< T >::Push(T element)
{   
    assert(tos != size-1);
    contain[++tos] = element;
}

//栈顶元素出栈
template<class T>
T ArrayStack< T >::Pop()
{
    assert(tos != -1);
    return contain[tos--];
}

//判断顺序栈是否为空
template<class T>
bool ArrayStack< T >::IsEmpty()
{
    return (tos == -1);
}

搜索更多相关主题的帖子: external symbol unresolved 顺序 
2010-10-17 10:14
duwn124
Rank: 1
等 级:新手上路
帖 子:31
专家分:0
注 册:2010-8-10
得分:0 
回复 2楼 m21wo
有错误啊,我的错误不是编译那的,是在链接时出的:
Linking...
main.obj : error LNK2001: unresolved external symbol "public: char __thiscall ArrayStack<char>::Pop(void)" (?Pop@?$ArrayStack@D@@QAEDXZ)
main.obj : error LNK2001: unresolved external symbol "public: bool __thiscall ArrayStack<char>::IsEmpty(void)" (?IsEmpty@?$ArrayStack@D@@QAE_NXZ)
main.obj : error LNK2001: unresolved external symbol "public: void __thiscall ArrayStack<char>::Push(char)" (?Push@?$ArrayStack@D@@QAEXD@Z)
main.obj : error LNK2001: unresolved external symbol "public: __thiscall ArrayStack<char>::ArrayStack<char>(int)" (??0?$ArrayStack@D@@QAE@H@Z)
Debug/ArrayStack.exe : fatal error LNK1120: 4 unresolved externals

麻烦高人再帮我好好看看,谢谢了!
2010-10-17 16:32
duwn124
Rank: 1
等 级:新手上路
帖 子:31
专家分:0
注 册:2010-8-10
得分:0 
回复 5楼 m21wo
我原来的意思是把main函数单独放一个cpp文件中,ArrayStack.cpp也单独放一个文件中,这样链接的时候就会报错,我觉得这样子来操作应该是没问题的啊,但就是为什么就会出错呢,求解释。
感觉是ArrayStack.h不能关联到ArrayStack.cpp的样子,高人帮忙救命啊...,谢谢了!
2010-10-18 22:04
duwn124
Rank: 1
等 级:新手上路
帖 子:31
专家分:0
注 册:2010-8-10
得分:0 
回复 5楼 m21wo
你那运行没错是因为你把ArrayStack.cpp和main.cpp合在同一个文件下了,要是分开的话还是会报错的,高人帮人帮到底吧,谢谢了!
2010-10-18 22:07
duwn124
Rank: 1
等 级:新手上路
帖 子:31
专家分:0
注 册:2010-8-10
得分:0 
回复 4楼 m21wo
是不是因为使用了模板的原因必须将类的定义和实现(ArrayStack.h和ArrayStack.cpp)放在同一个文件下啊?请高人指教,谢谢!
2010-10-19 17:19



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-323140-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.719357 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved