仅供参考我在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()'