FYI I am using eclipse CDT on ubuntu. I am getting started with c++. I don't know what the issue is. One of my friends has shown me how to create a generic class with a different example. This is how he did it. I tried going through many other Stack Overflow questions but all of them had errors that my program didn't have. Thanks in advance.
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;
}
Driver:
#include <iostream>
#include "Set.h"
using namespace std;
int main() {
    Set<int> *s1 = new Set<int>;
    return 0;
}
Error Messages:
/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()'
