0
Hello! I’m trying to compile the following code:
main:
#include "lista.h"
using namespace std;
int main(){
no<int> *n;
n = new no<int>(4);
n->setProx(new no<int>(5));
cout << n->obterValor() << endl;
return 0;
}```
list. h
#ifndef lista_h
#define lista_h
#include <iostream>
using namespace std;
template<typename type> class no{
private:
type v;
no *prox;
public:
no(type v);
void setProx(no* prox);
type obterValor();
no<type>* obterProx();
};
#endif
cpp list.
#include "lista.h"
template<typename type>
no<type>::no(type v){
this->v = v;
this->prox = NULL;
}
template<typename type>
void no<type>::setProx(no<type>* prox){
this->prox = prox;
}
template<typename type>
type no<type>::obterValor(){
return this->v;
}
template<typename type>
no<type>* no<type>::obterProx(){
return this->prox;
}
When I compile, as in Makefile:
all: lista.o main.o
g++ -o exe lista.o main.o
lista.o: lista.cpp lista.h
g++ -c lista.cpp
main.o: main.cpp lista.h
g++ -c main.cpp
go:
./exe
clean:
rm *.o && rm exe
And then the terminal returns me this:
g++ -c main.cpp
g++ -o exe lista.o main.o
/usr/bin/ld: main.o: na função "main":
main.cpp:(.text+0x25): referência não definida para "no<int>::no(int)"
/usr/bin/ld: main.cpp:(.text+0x44): referência não definida para "no<int>::no(int)"
/usr/bin/ld: main.cpp:(.text+0x54): referência não definida para "no<int>::setProx(no<int>*)"
/usr/bin/ld: main.cpp:(.text+0x60): referência não definida para "no<int>::obterValor()"
collect2: error: ld returned 1 exit status
make: *** [makefile:2: all] Error 1
I do not understand why these indefinite references to functions. The main.cpp and list.cpp files are compiled and generate the '.o' object, but the error is time to create the executable.