g++ compilation problems

I have a simple program with three files: programa.cc (contains the main function), pilha.cc and pilha.h (that describe a the class Pilha, that simulates a stack).
I can't understand the error because this is my first contact with C++.
The source code of my program is:
programa.cc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include <pilha.h>

using namespace std;

void ajuda() {
	cout << " (a) adicionar um item na fila" << endl
		 << " (r) retirar um elemento da fila" << endl
		 << " (m) mostrar a fila" << endl
		 << " (h) mostra esta lista de comandos" << endl
		 << " (s) encerra o programa" << endl;
}

int main(int argc, char** argv) {
	Pilha dados;
	cout << "Fila de números, use os comandos abaixo para controlar a lista" << endl
		 << "Use o comando (h) para obter ajuda" << endl << endl;

	while(true) {
		cout << " > ";

		string linha;
		cin >> linha;

		stringstream stream(linha);
		string comando;
		stream >> comando;

		if(comando == "a") {
			int n;
			stream >> n;
			cout << dados.adicionar(n);
			continue;
		}
		if(comando == "r") {
			cout << dados.retirar() << endl;
			continue;
		}
		if(comando == "h") {
			ajuda();
			continue;
		}
		if(comando == "q") {
			cout << "Só para que você não se arrependa" << endl
				// << dados.mostrar() << endl
				 << "Até mais!" << endl;
			break;
		}
		cout << "Este comando não foi definido!" << endl;
	}
	return 0;
}

pilha.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#ifndef _PILHA_H_
#define _PILHA_H_

#define PILHA_MAX 100
#define ERRO_PILHA_VAZIA -1
#define ERRO_PILHA_CHEIA -2

#include <string>

class Pilha {
	public:
		Pilha();
		~Pilha();
		bool cheia();
		bool vazia();
		int adicionar(int dado);
		int retirar();
	private:
		int dados[PILHA_MAX];
		int ultimo;
};

#endif 

pilha.cc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <pilha.h>

Pilha::Pilha() {
	ultimo = 1;
}
Pilha::~Pilha() {
	ultimo = 1;
}
bool Pilha::cheia() {
	return ultimo >= PILHA_MAX - 1;
}
bool Pilha::vazia() {
	return ultimo <= -1;
}
int Pilha::adicionar(int dado) {
	if(cheia()) return ERRO_PILHA_CHEIA;
	dados[++ultimo] = dado;
	return ultimo;
}
int Pilha::retirar() {
	if(vazia()) return ERRO_PILHA_VAZIA;
	return dados[ultimo--];
}

When I try to compile the this happens:
gabriel@casa:~/Desktop/trabalho1/pilha$ g++ -I. programa.cc -o programa
/tmp/cc4TTt4D.o: In function `main':
programa.cc:(.text+0xc1): undefined reference to `Pilha::Pilha()'
programa.cc:(.text+0x1f9): undefined reference to `Pilha::adicionar(int)'
programa.cc:(.text+0x23a): undefined reference to `Pilha::retirar()'
programa.cc:(.text+0x3a8): undefined reference to `Pilha::~Pilha()'
programa.cc:(.text+0x3f6): undefined reference to `Pilha::~Pilha()'
collect2: ld returned 1 exit status

I've implemented all these methods so I need to know where the error is.
It is urgent because is an exercise for data structures subject for college and I need it for tomorrow.
Sorry if I made any errors in spelling or grammar above (I'm sure I did), but my English is passive most times.
Last edited on
In pilha.cc you are using MAX_PILHA when it should be PILHA_MAX.

In pilha.cc you forgot to include pilha.h.
Thank you Peter, I corrected these errors, but wasn't causing the problem.
I've updated the post, so now you can see the output generated by g++
You need to include pilha.cc in the list of source files.
g++ -I. programa.cc pilha.cc -o programa
Exact! Thank you Peter. Worked perfect, the problem was on the compilation, I was trying the wrong way...
Topic archived. No new replies allowed.