【发布时间】:2016-03-31 11:49:27
【问题描述】:
我有一个类数组
template <typename T>
class Array : public SequentialContainer<T>{
public:
Array(Int size){local_vector.reserve(size);}
Array(std::initializer_list<T> initializer_list){
local_vector.assign(initializer_list);
}
virtual Boolean contains(T &object) const;
virtual Boolean contains(Container<T> &container) const;
virtual Int size() const;
virtual T &operator[](Int idx);
virtual T &get(Int idx);
virtual void set(Int idx, const T &object);
virtual Int indexOf(T &object);
virtual Iterator<T> iterator() const;
};
Array.cpp文件中的所有方法都是这样实现的:
template <typename T>
Boolean Array<T>::contains(T &object) const {
//code
}
如果我尝试在 main.cpp 文件中使用这个 Array 类:
Array<int> c = {1, 2, 3, 4, 5, 6};
std::cout << c.[4] <<std::endl;
我收到这些链接器错误:
undefined reference to `Array<int>::iterator() const'
undefined reference to `Array<int>::contains(int&) const'
undefined reference to `Array<int>::contains(Container<int>&) const'
etc...
对于 Array 类的每个方法。所有文件都在我的 cmake 文件中,应该编译。 为什么我收到此链接器错误?有人可以解释一下吗?
【问题讨论】:
-
Array.cpp您必须将所有模板定义放在标题中。模板不像普通类那样工作...... -
"Array.cpp文件中所有的方法都是这样实现的:"哎呀
标签: c++ c++11 compilation linker