This question already has answers here:
Why can templates only be implemented in the header file?

(17个答案)


4年前关闭。




我有一个数组类
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文件中,应该进行编译。
为什么我收到此链接器错误?有人可以向我解释一下吗?

最佳答案

您无法在cpp文件中实现模板方法或类。尝试在标题中执行此操作

关于c++ - 使用模板时出现“undefined reference to”链接器错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36332619/

10-10 12:25