我在Vec.h中创建了一个类,如下所示:
#include <VECTOR>
using namespace std;
template<class T>
class Vec:public vector<T>
{
public:
Vec():vector<T>(){}
Vec(int s):vector<T>(s){}
T& operator[](int i){return at(i);}
const T& operator[](int i) const {return at(i);}
~Vec();
};
在main.cpp中:
int main(int argc, char* argv[])
{
Vec<int> test(2);
return 0;
}
但是当我编译它们时,它会显示:
error LNK2001: unresolved external symbol "public: __thiscall Vec<int>::~Vec<int> (void)" (??1?$Vec@H@@QAE@XZ)
Debug/CPlusTest.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.
我的编译方法是VC6.0。 我该怎么办?
更新: 抱歉!我不会复制整个“main.cpp”,它应该是:
#include <string>
#include <IOSTREAM>
#include "Vec.h"
using namespace std;
int main(int argc, char* argv[])
{
Vec<int> test(2);
return 0;
}
现在错误是因为我没有意识到“~Vec();” 所以,像这样修改这个Vec.h:
~Vec(){}
编译成功!
答案 0 :(得分:3)
#include <VECTOR>
我假设您打算包含#include <vector>
。
外部未解决?您没有实现~Vec(void);
仅存在声明。请实现析构函数或者不要声明它。
另外,为了更好的风格,我建议您删除using namespace std;
并改用std::vector<T>
。
另一个样式问题是主函数中的return 0;
。请改用EXIT_SUCCESS
要编辑:
告诉你需要一个实现。你的标题也很奇怪
#include <IOSTREAM>
这是什么 ?请使用通常的样式表单:#include <iostream>
。包含可能有用,但看起来很奇怪。