| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 927 人关注过本帖
标题:顺序栈问题(unresolved external symbol)
只看楼主 加入收藏
duwn124
Rank: 1
等 级:新手上路
帖 子:31
专家分:0
注 册:2010-8-10
结帖率:77.78%
收藏
已结贴  问题点数:20 回复次数:7 
顺序栈问题(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
m21wo
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:4
帖 子:440
专家分:1905
注 册:2010-9-23
收藏
得分:20 
程序代码:
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();
};


ArrayStack.cpp

#include <iostream>
#include <cassert>
#include "ArrayStack.h"
using namespace std;
#define MaxSize 10
//设定顺序栈的最大容量
template<class T>
ArrayStack<T>::ArrayStack(int max=MaxSize)   // 应该这么写!
{
    size = max;
    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);
}

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;  
}


就没错误了!


If You Want Something, Go Get It, Period.
2010-10-17 10:26
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
m21wo
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:4
帖 子:440
专家分:1905
注 册:2010-9-23
收藏
得分:0 
要按我这么写啊!我知道你是连接错误啊!你把申明都放在一个头文件里,实现部分放在源文件不就ok了吗?我的编译运行一点也没问题啊 !

If You Want Something, Go Get It, Period.
2010-10-17 21:33
m21wo
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:4
帖 子:440
专家分:1905
注 册:2010-9-23
收藏
得分:0 
或者你把你的在主函数的cpp里的头文件ArrayStack.h,该为ArrayStack.cpp,就ok了!呵呵!我知道很不正规!所以么,就按我说的那么做么!

If You Want Something, Go Get It, Period.
2010-10-17 21:35
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
快速回复:顺序栈问题(unresolved external symbol)
数据加载中...
 
   



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

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