0

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()'
PrimeHero
  • 59
  • 5

0 Answers0