Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Henrique Barcelos

[Resolvido] Problemas com Herança

Recommended Posts

Boa noite galera...

 

Alguem precisa me salvar :s

 

Tenho que entregar isto em 1h

 

Estou criando um Jogo da Velha onde obrigatóriamente a Classe Screen deve derivar de GameBoard:

 

class GameBoard {
protected:
 int *matrix;
 int size;
public:
 GameBoard(int);
 virtual ~GameBoard();

 virtual void draw();
 void reset();
 void setVal(int, int);

 int & operator [](int);
};

GameBoard::GameBoard(int tam){
 matrix = new int[tam];
 size = tam;
}

GameBoard::~GameBoard(){
 delete matrix;
}

void GameBoard::reset(){
 for (register int i = 0; i < 9; i++) {
 matrix[i] = -1;
 }
}

void GameBoard::setVal(int pos, int val){
 matrix[pos] = val;
}

int & GameBoard::operator [](int pos){
 return matrix[pos];
}

//Implementação da tela do jogo
class Screen : public GameBoard {
public:
 /* ==================== Construtores e Destrutores ====================== */
 Screen();
 ~Screen();

 /* ========================= Métodos Públicos =========================== */
 void draw();
};

//Construtor
Screen::Screen():GameBoard(9) {
}

//Destrutor
Screen::~Screen() {
 delete matrix;
}

//Mostra a matriz na tela
void Screen::draw() {
 system("cls");
 cout << "+---+---+---+" << endl;
 for (register int i = 0; i < 9; i++) {
 cout << "|";
 switch (matrix[i]) {
 case 0:
 cout << " X ";
 break;
 case 1:
 cout << " 0 ";
 break;
 default:
 cout << " ";
 }
 if (i % 3 == 2) {
 cout << "|" << endl;
 cout << "+---+---+---+" << endl;
 }
 }
}

 

O erro que aparece é esse:

 

collect2: ld returned 1 exit status

Compartilhar este post


Link para o post
Compartilhar em outros sites

Aqui pelo menos aparece uma descrição dos erros...

 

isis@linux-45c9:~/src> g++ borad.cpp -Wall

borad.cpp: In member function ‘virtual void Screen::draw()’:

borad.cpp:61: error: ‘system’ was not declared in this scope

borad.cpp:62: error: ‘cout’ was not declared in this scope

borad.cpp:62: error: ‘endl’ was not declared in this scope

 

 

Até onde eu entendi, não funciona pq você não forneceu uma implementação "genérica".

No código coloquei

 

void GameBoard::draw() {};

 

Compilou e imprimiu o grid.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Novamente estou eu aqui com o mesmo tipo de problema...

 

Tenho duas classes: Menu (base) e MenuNotas (derivada);

 

Na classe base, há um método chamado show(), virtual...

 

Estou tentando fazer com que a classe derivada tenha seu próprio método show...

 

class Menu {
protected:
	int num_opt;
	string *texts;
public:
	Menu(int num){
 	if(num <= 0)
 	num = 1;
 	num_opt = num;
 	texts = new string[num_opt];
	}
	virtual ~Menu(){
 	delete texts;
	}
	virtual void show(){
 	for(register int i = 0; i < num_opt; i++){
 	cout << "[" << i << "]" << texts[i] << endl;
 	}
	}

	string & operator [](int index){
 	return texts[index];
	}
};

class MenuNotas : public Menu {
public:
	MenuNotas();
	~MenuNotas();
	virtual void show();
};

MenuNotas::MenuNotas(): Menu(6) {
	
}

void MenuNotas::show(){
	
}

Porque aparece esse erro:

 

E:/Documents/NetBeansProjects/Trabalho - Notas e Médias/classMenuNotas.h:18: undefined reference to `vtable for MenuNotas'

Como assim, não há referência para a classe MenuNotas na vtable? O.o

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se eu retirar isso, não compila, pois não há um construtor de Menu sem parâmetros...

 

O mais estranho é que depois de uns 10 minutos, sem eu alterar nada compilou :blink:

 

Obrigado pela ajuda...

Compartilhar este post


Link para o post
Compartilhar em outros sites

O mais estranho é que depois de uns 10 minutos, sem eu alterar nada compilou

UFDHASUFHAUSHFAUausdhf..

 

=p

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.