Oi pessoal.
Estou estudando C++ a um tempo pelo site cplusplus.com. Eu estou achando bastante interessante, porém acho que eles emitem grande parte de Orientação a Objetos. Quando terminar de estudar o que falta (Templates, Namespace e mais uns 3 tópicos), quero estudar o Accelerated C++ e o Effective C++. Vocês acham uma boa idéia?
Eu dei uma procurada (bem pouco, na verdade) e não achei uma resposta direta para o meu problema.
Bom, o meu problema é que eu tenho 2 headers: poligono.h e triangulo.h.
// poligono.h
class Poligono
{
private:
int altura, largura;
public:
Poligono();
~Poligono();
void setValores(int, int);
};
// triangulo.h
#include <iostream>
#include "poligono.h"
using namespace std;
class Triangulo : public Poligono
{
public:
Triangulo();
~Triangulo();
void mostrarDescricao();
};
Eu tenho o include “poligono.h” nesse último código por causa da herança. Está correto isso?
Tenho também 3 arquivos: poligono.cpp, triangulo.cpp e main.cpp. Em cada .cpp eu tenho o include do respectivo header.
// poligono.cpp
#include <iostream>
#include "poligono.h"
using namespace std;
Poligono::Poligono()
{
cout << endl << "Criando um poligono." << endl << endl;
}
Poligono::~Poligono()
{
cout << endl << "Destruindo um poligono." << endl << endl;
}
void Poligono::setValores(int novaAltura, int novaLargura)
{
altura = novaAltura;
largura = novaLargura;
}
// triangulo.cpp
#include <iostream>
#include "triangulo.h"
using namespace std;
Triangulo::Triangulo()
{
cout << endl << "Criando um triangulo." << endl << endl;
}
Triangulo::~Triangulo()
{
cout << endl << "Destruindo um triangulo." << endl << endl;
}
void Triangulo::mostrarDescricao()
{
cout << endl << "I'm a triangle!" << endl << endl;
}
// main.cpp
#include <iostream>
#include "poligono.h"
#include "triangulo.h"
using namespace std;
int main()
{
Poligono p;
return 0;
}
Bom, estou usando Linux e pra compilar, primeiramente eu gero os objetos:
[quote]dede@dede-laptop:~/Área de Trabalho/teste$ g++ -c poligono.cpp
dede@dede-laptop:~/Área de Trabalho/teste$ g++ -c triangulo.cpp
[/quote]
E depois, tento compilar a main.cpp:
[quote]dede@dede-laptop:~/Área de Trabalho/teste$ g++ -o main main.cpp
[/quote]
E tenho o seguinte erro:
[quote]In file included from triangulo.h:2,
from main.cpp:3:
poligono.h:1: erro: redefinition of ?class Poligono?
poligono.h:2: erro: previous definition of ?class Poligono?[/quote]
Bom, já tentei mudar algumas coisas e não sei o que pode estar errado. Deve ser uma coisa bem boba que eu estou esquecendo de fazer.
Alguém pode me dar uma ajuda?
Abraço.
[editado]
Recentemente, fui parar no FAQ do parashift.com e li que é aconselhável sempre escrever “std::cout”. Vocês concordam com isso? Isso não demanda muito tempo de codificação?
Abraço.
[/editado]