1
I usually use g++ to compile my code, but now that I’ve started learning template
I cannot compile for anything, the following error appears:
g++ -c pilha.cpp pilha-infinita.cpp
g++ pilha.o pilha-infinita.o -o pilha.exe
pilha-infinita.o: na função `main':
pilha-infinita.cpp:(.text+0x2c): referência indefinida para `pilha<int>::vazio()'
pilha-infinita.cpp:(.text+0x3f): referência indefinida para `pilha<int>::topo()'
pilha-infinita.cpp:(.text+0x69): referência indefinida para `pilha<int>::~pilha()'
pilha-infinita.cpp:(.text+0x8b): referência indefinida para `pilha<int>::~pilha()'
collect2: error: ld returned 1 exit status
Follows the codes of the files stack. h, stack.cpp and infinite.cpp below:
//pile. h
#include <iostream>
#include <stdlib.h>
using namespace std;
template <class T>
class elemento
{
T dado;
elemento<T> *prox;
};
template <class T>
class pilha
{
private:
elemento<T> *top;
public:
pilha() { top = NULL; }
bool empilha(T);
T topo();
T pop();
bool vazio();
~pilha();
};
//cell.cpp
#include "pilha.h"
#include <stdio.h>
#include <stdlib.h>
template <class T>
pilha<T>::~pilha()
{
delete [] top;
}
template <class T>
bool pilha<T>::empilha(T x)
{
if (top==NULL)
{
top = new elemento<T>;
top->dado = x;
top->prox = NULL;
return true;
}
else
{
elemento<T> *aux = new elemento<T>;
aux->dado = x;
aux->prox = top;
top = aux;
return true;
}
return false;
}
template <class T>
T pilha<T>::topo()
{
if (!vazio())
{
return top->dado;
}
return -1; //RETORNA -1 QUANDO A PILHA ESTA VAZIA
}
template <class T>
T pilha<T>::pop()
{
if (vazio())
{
return -1; //RETORNA -1 QUANDO A PILHA ESTA VAZIA
}
else
{
T aux = top->dado;
top = top->prox;
return aux;
}
}
template <class T>
bool pilha<T>::vazio()
{
return (top==NULL);
}
//infinite cell.cpp
#include <iostream>
#include "pilha.h"
using namespace std;
int main()
{
pilha<int> p;
if (!p.vazio())
{
cout<<p.topo()<< endl;
}
p.empilha(1);
cout<<p.pop()<< endl;
p.empilha(2);
cout<<p.pop()<< endl;
p.empilha(3);
cout<<p.pop()<< endl;
p.empilha(4);
cout<<p.pop()<< endl;
p.empilha(5);
cout<<p.pop()<< endl;
p.empilha(6);
p.empilha(7);
p.empilha(8);
cout<<p.pop()<< endl;
p.empilha(9);
p.empilha(10);
p.empilha(11);
p.empilha(12);
p.empilha(13);
cout<<p.pop()<< endl;
p.empilha(14);
cout<<p.topo()<< endl;
cout<<p.pop()<< endl;
cout<<p.pop()<< endl;
cout<<p.pop()<< endl;
cout<<p.pop()<< endl;
cout<<p.pop()<< endl;
cout<<p.pop()<< endl;
cout<<p.pop()<< endl;
cout<<p.pop()<< endl;
return 0;
}
After entering the public is giving the following errors:
pilha-infinita.o: na função `main':
pilha-infinita.cpp:(.text+0x2c): referência indefinida para `pilha<int>::vazio()'
pilha-infinita.cpp:(.text+0x3f): referência indefinida para `pilha<int>::topo()'
pilha-infinita.cpp:(.text+0x69): referência indefinida para `pilha<int>::empilha(int)'
pilha-infinita.cpp:(.text+0x75): referência indefinida para `pilha<int>::pop()'
pilha-infinita.cpp:(.text+0x9f): referência indefinida para `pilha<int>::empilha(int)'
pilha-infinita.cpp:(.text+0xab): referência indefinida para `pilha<int>::pop()'
pilha-infinita.cpp:(.text+0xd5): referência indefinida para `pilha<int>::empilha(int)'
pilha-infinita.cpp:(.text+0xe1): referência indefinida para `pilha<int>::pop()'
pilha-infinita.cpp:(.text+0x10b): referência indefinida para `pilha<int>::empilha(int)'
pilha-infinita.cpp:(.text+0x117): referência indefinida para `pilha<int>::pop()'
pilha-infinita.cpp:(.text+0x141): referência indefinida para `pilha<int>::empilha(int)'
pilha-infinita.cpp:(.text+0x14d): referência indefinida para `pilha<int>::pop()'
pilha-infinita.cpp:(.text+0x177): referência indefinida para `pilha<int>::empilha(int)'
pilha-infinita.cpp:(.text+0x188): referência indefinida para `pilha<int>::empilha(int)'
pilha-infinita.cpp:(.text+0x199): referência indefinida para `pilha<int>::empilha(int)'
pilha-infinita.cpp:(.text+0x1a5): referência indefinida para `pilha<int>::pop()'
pilha-infinita.cpp:(.text+0x1cf): referência indefinida para `pilha<int>::empilha(int)'
pilha-infinita.cpp:(.text+0x1e0): referência indefinida para `pilha<int>::empilha(int)'
pilha-infinita.cpp:(.text+0x1f1): referência indefinida para `pilha<int>::empilha(int)'
pilha-infinita.cpp:(.text+0x202): referência indefinida para `pilha<int>::empilha(int)'
pilha-infinita.cpp:(.text+0x213): referência indefinida para `pilha<int>::empilha(int)'
pilha-infinita.cpp:(.text+0x21f): referência indefinida para `pilha<int>::pop()'
pilha-infinita.cpp:(.text+0x249): referência indefinida para `pilha<int>::empilha(int)'
pilha-infinita.cpp:(.text+0x255): referência indefinida para `pilha<int>::topo()'
pilha-infinita.cpp:(.text+0x27a): referência indefinida para `pilha<int>::pop()'
pilha-infinita.cpp:(.text+0x29f): referência indefinida para `pilha<int>::pop()'
pilha-infinita.cpp:(.text+0x2c4): referência indefinida para `pilha<int>::pop()'
pilha-infinita.cpp:(.text+0x2e9): referência indefinida para `pilha<int>::pop()'
pilha-infinita.cpp:(.text+0x30e): referência indefinida para `pilha<int>::pop()'
pilha-infinita.o:pilha-infinita.cpp:(.text+0x333): mais referências indefinidas para seguir `pilha<int>::pop()'
pilha-infinita.o: na função `main':
pilha-infinita.cpp:(.text+0x3a7): referência indefinida para `pilha<int>::~pilha()'
pilha-infinita.cpp:(.text+0x3c9): referência indefinida para `pilha<int>::~pilha()'
collect2: error: ld returned 1 exit status
Take a look at [tour]. You can accept an answer if it solved your problem. You can vote on every post on the site as well. Did any help you more? You need something to be improved?
– Maniero
I believe it is because the "stack. h" is already inside the "stack.cpp"...
– m. alexandre reis