求助!VS2005中 “无法解析的外部命令”问题
刚刚看了命名空间,就试用了一下,结果出现“无法解析的外部命令” 望解释一下//stack.h
#ifndef _STACK_H_
#define _STACK_H_
namespace STACK
{
const int maxsize=50;
int UNDERFLOW=0;//下溢
int OVERFLOW=0;//上溢
template<class T>
class stack
{
private:
T *data;
int index;
int max;//该栈的最大长度
public:
stack(int num=maxsize);
~stack();
void push(T);
T pop();
T gettop();
int length();
bool isempty();
void print()const;
};
}
#endif
//stack.cpp
#include<iostream>
#include"stack.h"
using namespace std;
template<class T>
STACK::stack<T>::stack(int num = maxsize)
{
data=new T(num);
index=0;
max=num;
}
template<class T>
STACK::stack<T>::~stack()
{
delete [] data;
}
template<class T>
T STACK::stack<T>::gettop()
{
try
{
if(index==0)
throw UNDERFOLW;
return data[index];
}
catch UNDERFLOW
{
cout<<"发生下溢"<<endl;
}
}
template<class T>
void STACK::stack<T>::push(T t)
{
try
{
if(index==max)
throw OVERFLOW;
data[index];
++index;
}
catch OVERFLOW
{
cout<<"发生上溢"<<endl;
}
}
template<class T>
T STACK::stack<T>::pop()
{
try
{
if(index==0)
throw UNDERFLOW;
--index;
return data[index];
}
catch UNDERFLOW
{
cout<<"发生下溢"<<endl;
}
}
template<class T>
int STACK::stack<T>::length()
{
return index;
}
template<class T>
bool STACK::stack<T>::isempty()
{
if(index==max)
return true;
return false;
}
template<class T>
void STACK::stack<T>::print() const
{
int j=length();
for(int i=0;i<j;++i)
cout<<data[i]<<' ';
cout<<endl;
}
//main.cpp
#include<iostream>
#include"stack.h"
using namespace std;
void main()
{
STACK::stack<int> intstack(10);
STACK::stack<char> charstack(8);
if(intstack.isempty()==true)
cout<<"Int stack is empty"<<endl;
else
cout<<"Int stack isn't empty"<<endl;
for(int i=0;i<9;++i)
intstack.push(i);
intstack.print();
for(int i=0;i<5;++i)
{
char ch;
ch='a'+i;
charstack.push(ch);
}
charstack.print();
}
结果链接时出错:
1>------ 已启动生成: 项目: stack, 配置: Debug Win32 ------
1>正在编译...
1>main.cpp
1>正在链接...
1>main.obj : error LNK2005: "int STACK::UNDERFLOW" (?UNDERFLOW@STACK@@3HA) 已经在 stack.obj 中定义
1>main.obj : error LNK2005: "int STACK::OVERFLOW" (?OVERFLOW@STACK@@3HA) 已经在 stack.obj 中定义
1>main.obj : error LNK2019: 无法解析的外部符号 "public: __thiscall STACK::stack<int>::~stack<int>(void)" (??1?$stack@H@STACK@@QAE@XZ),该符号在函数 _main 中被引用
1>main.obj : error LNK2019: 无法解析的外部符号 "public: __thiscall STACK::stack<char>::~stack<char>(void)" (??1?$stack@D@STACK@@QAE@XZ),该符号在函数 _main 中被引用
1>main.obj : error LNK2019: 无法解析的外部符号 "public: void __thiscall STACK::stack<char>::print(void)const " (?print@?$stack@D@STACK@@QBEXXZ),该符号在函数 _main 中被引用
1>main.obj : error LNK2019: 无法解析的外部符号 "public: void __thiscall STACK::stack<char>::push(char)" (?push@?$stack@D@STACK@@QAEXD@Z),该符号在函数 _main 中被引用
1>main.obj : error LNK2019: 无法解析的外部符号 "public: void __thiscall STACK::stack<int>::print(void)const " (?print@?$stack@H@STACK@@QBEXXZ),该符号在函数 _main 中被引用
1>main.obj : error LNK2019: 无法解析的外部符号 "public: void __thiscall STACK::stack<int>::push(int)" (?push@?$stack@H@STACK@@QAEXH@Z),该符号在函数 _main 中被引用
1>main.obj : error LNK2019: 无法解析的外部符号 "public: bool __thiscall STACK::stack<int>::isempty(void)" (?isempty@?$stack@H@STACK@@QAE_NXZ),该符号在函数 _main 中被引用
1>main.obj : error LNK2019: 无法解析的外部符号 "public: __thiscall STACK::stack<char>::stack<char>(int)" (??0?$stack@D@STACK@@QAE@H@Z),该符号在函数 _main 中被引用
1>main.obj : error LNK2019: 无法解析的外部符号 "public: __thiscall STACK::stack<int>::stack<int>(int)" (??0?$stack@H@STACK@@QAE@H@Z),该符号在函数 _main 中被引用
1>F:\Users\Administrator\Documents\Visual Studio 2005\Projects\stack\Debug\stack.exe : fatal error LNK1120: 9 个无法解析的外部命令
1>生成日志保存在“file://f:\Users\Administrator\Documents\Visual Studio 2005\Projects\stack\Debug\BuildLog.htm”
1>stack - 12 个错误,0 个警告
========== 生成: 0 已成功, 1 已失败, 0 最新, 0 已跳过 ==========
请问这是什么问题,如何解决啊?