积极答复者
问一个关于头文件的小白问题

问题
-
#include <iostream> #include <string> #include <cstdlib> #include "stack1.cpp" using namespace std; int main() { try { stack1<int> intStack; stack1<string> stringStack; intStack.push(7); cout<<intStack.top()<<endl; stringStack.push("Hello"); cout<<stringStack.top()<<endl; stringStack.pop(); stringStack.pop(); } catch (exception const& ex) { cerr<<"Excetion: "<<ex.what()<<endl; return EXIT_FAILURE; } return 0; }
如上面的代码,当我使用#include "stack1.cpp" 时,就能正确编译。但如果我使用 #include "stack1.h"时,就会产生如下的错误
1> Main.cpp
1>Main.obj : error LNK2019: 无法解析的外部符号 "public: __thiscall stack1<int>::stack1<int>(void)" (??0?$stack1@H@@QAE@XZ),该符号在函数 _main 中被引用
1>Main.obj : error LNK2019: 无法解析的外部符号 "public: __thiscall stack1<int>::~stack1<int>(void)" (??1?$stack1@H@@QAE@XZ),该符号在函数 _main 中被引用
1>Main.obj : error LNK2019: 无法解析的外部符号 "public: void __thiscall stack1<int>::push(int const &)" (?push@?$stack1@H@@QAEXABH@Z),该符号在函数 _main 中被引用
1>Main.obj : error LNK2019: 无法解析的外部符号 "public: int __thiscall stack1<int>::top(void)const " (?top@?$stack1@H@@QBEHXZ),该符号在函数 _main 中被引用
1>Main.obj : error LNK2019: 无法解析的外部符号 "public: __thiscall stack1<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > >::stack1<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > >(void)" (??0?$stack1@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@@QAE@XZ),该符号在函数 _main 中被引用
1>Main.obj : error LNK2019: 无法解析的外部符号 "public: __thiscall stack1<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > >::~stack1<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > >(void)" (??1?$stack1@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@@QAE@XZ),该符号在函数 _main 中被引用
1>Main.obj : error LNK2019: 无法解析的外部符号 "public: void __thiscall stack1<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > >::push(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (?push@?$stack1@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@@QAEXABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z),该符号在函数 _main 中被引用
1>Main.obj : error LNK2019: 无法解析的外部符号 "public: void __thiscall stack1<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > >::pop(void)" (?pop@?$stack1@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@@QAEXXZ),该符号在函数 _main 中被引用
1>Main.obj : error LNK2019: 无法解析的外部符号 "public: class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __thiscall stack1<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > >::top(void)const " (?top@?$stack1@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@XZ),该符号在函数 _main 中被引用
请问这是什么原因呢?