编译:错误LNK2001

时间:2013-12-18 07:03:25

标签: c++

我在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(){}

编译成功!

1 个答案:

答案 0 :(得分:3)

#include <VECTOR>

我假设您打算包含#include <vector>

外部未解决?您没有实现~Vec(void);仅存在声明。请实现析构函数或者不要声明它。

另外,为了更好的风格,我建议您删除using namespace std;并改用std::vector<T>

另一个样式问题是主函数中的return 0;。请改用EXIT_SUCCESS

要编辑: 告诉你需要一个实现。你的标题也很奇怪 #include <IOSTREAM>
这是什么 ?请使用通常的样式表单:#include <iostream>。包含可能有用,但看起来很奇怪。