泛型类中构造函数的未定义引用?

时间:2017-05-07 11:34:51

标签: c++ class c++11 constructor generic-programming

仅供参考我在ubuntu上使用eclipse CDT。我开始使用c ++。我不知道问题是什么。我的一位朋友向我展示了如何使用不同的示例创建泛型类。这就是他做到的。我尝试了很多其他Stack Overflow问题但是所有这些问题都有我的程序没有的错误。提前谢谢。

Set.h:

#ifndef SET_H_
#define SET_H_

#include <vector>

template <typename T>
class Set
{
private:
    std::vector<T> _set_arr;

public:
    Set();
    ~Set();
    void Add(T);
    void Remove(int);

    // FRIENDS
    template <typename S>
    friend Set<S>& operator +(Set<S>, Set<S>);
};


#endif /* SET_H_ */

Set.cpp:

#include "Set.h"

template <typename T>
Set<T>::Set()
    : _set_arr{}
{}

template <typename T>
Set<T>::~Set()
{}

/**
 * Adds a value to the Set
 */
template <typename T>
void Set<T>::Add(T val)
{
    _set_arr.push_back(val);
}

/**
 * Removes a value from the Set
 */
template <typename T>
void Set<T>::Remove(int index)
{
    _set_arr.erase(_set_arr.begin() + index);
}

template <typename S>
Set<S>& operator +(Set<S> &a, Set<S> &b)
{
    Set<S> *_set_1 = new Set<S>;
    // Pre-reserve
    _set_1->_set_arr.reserve(
        a._set_arr.size(), b._set_arr.size() );
    // Insert
    _set_1->_set_arr.insert(_set_1->_set_arr.end(), a._set_arr.begin(), a._set_arr.end() );
    _set_1->_set_arr.insert(_set_1->_set_arr.end(), b._set_arr.begin(), b._set_arr.end() );
    return *_set_1;
}

驱动:

#include <iostream>
#include "Set.h"
using namespace std;

int main() {
    Set<int> *s1 = new Set<int>;

    return 0;
}

错误讯息:

/home/ajay/code/eclipse_workspace/GenericSet/Debug/../src/main.cpp:14: undefined reference to `Set<int>::Set()'
makefile:45: recipe for target 'GenericSet' failed
/home/ajay/code/eclipse_workspace/GenericSet/Debug/../src/main.cpp:14: undefined reference to `Set<int>::~Set()'

0 个答案:

没有答案