I have a Set template class and a Menu class both with their respective .cpp and .hpp, when trying to use a pointer of the set class in my Menu class I get the following error:
||=== Build: Debug in Trabalho04 (compiler: GNU GCC Compiler) ===|
obj\Debug\src\Menu.o||In function 'ZN4MenuC2Ev':|
C:\Trabalho04\src\Menu.cpp|5|undefined reference to 'Conjunto<int>::Conjunto()'|
obj\Debug\src\Menu.o||In function 'ZN4Menu5opcaoEv':|
C:\Trabalho04\src\Menu.cpp|22|undefined reference to 'Conjunto<int>::criaConjunto()'|
||=== Build failed: 2 error(s), 0 warning(s) (0 minute(s), 1 second(s)) ===|
Set.hpp
template <class T>
class Conjunto {
public:
Conjunto();
void criaConjunto();
virtual ~Conjunto();
private:
Conjunto<int> * conjunto;
T * elementos;
int qtd;
int tam;
};
Set.cpp
#include "Conjunto.hpp"
#include "Bibliotecas.hpp"
template <class T>
Conjunto<T>::Conjunto() {
elementos = new T[10];
qtd = 0;
tam = 10;
}
template <class T>
void Conjunto<T>::criaConjunto(){
int num;
cin >> num;
if(conjunto!=NULL) {
conjunto = NULL;
delete conjunto;
}
if(num == 0) {
conjunto = new Conjunto<int>();
} else {
conjunto = new Conjunto<int>(num);
}
}
template <class T>
Conjunto<T>::~Conjunto() {
delete [] elementos;
elementos = NULL;
}
Menu.cpp
#include "Menu.hpp"
Menu::Menu() {
conjunto = new Conjunto<int>();
}
void Menu::opcao() {
int opcao = 0;
do {
opcao = menu();
switch(opcao) {
case 1:
conjunto->criaConjunto();
break;
case 2:
//Sair
break;
}
} while(opcao != 2);
}
Menu.hpp
#include "Conjunto.hpp"
class Menu {
public:
Menu();
int menu();
void opcao();
virtual ~Menu();
//private:
int tam;
Conjunto<int> * conjunto;
};