Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Eu fiz uma classe retangulo para aprender a trabalhar com classes e ponteiros:
Retangulo.h
#ifndef RETANGULO_H
#define RETANGULO_H
class retangulo
{
public:
retangulo(double*, double*);
void setCoordenadasX(double*);
void setCoordenadasY(double*);
double* getPontosX();
double* getPontosY();
double altura();
double largura();
double perimeter();
double area();
private:
double coordX[2];
double coordY[2];
};
#endif // RETANGULO_H
Retangulo.cpp
#include "retangulo.h"
retangulo::retangulo(double x, double y)
{
coordX[0] = x[0];
coordX[1] = x[1];
coordY[0] = y[0];
coordY[1] = y[1];
}
void retangulo::setCoordenadasX(double *x)
{
coordX[0] = x[0];
coordX[1] = x[1];
}
void retangulo::setCoordenadasY(double *)
{
coordY[0] = y[0];
coordY[1] = y[1];
}
double* retangulo::getPontosX()
{
return coordX;
}
double* retangulo::getPontosY()
{
return coordY;
}
double retangulo::altura()
{
return (coordY[0] - coordX[0]);
}
double retangulo::largura()
{
return (coordX[1] - coordX[0]);
}
double retangulo::perimeter()
{
return ((altura() * 2) + (largura() * 2));
}
double retangulo::area()
{
return (largura() * altura());
}
Main.cpp
#include <iostream>
#include "Retangulo.h"
using namespace std;
int main()
{
double vet1[2] = {1,5},
vet2[2] = {4,4};
retangulo ret1(vet1, vet2);
cout << "Retangulo 1\nAltura: " << ret1.altura() << "\nLargura: " << ret1.largura()
<< "\nArea: " << ret1.area() << "\nPerimetro: " << ret1.perimeter() << endl;
/*cout << "Retangulo 2\nAltura: " << ret2.getLenght() << "\nLargura: " << ret2.getWidth()
<< "\nArea: " << ret2.area() << "\nPerimetro: " << ret2.perimeter() << endl;*/
return 0;
}
Estou com erro em: undefined reference to 'retangulo::retangulo(double, double)'
Só que não entendi, estou enviando um vetor para a função. Não está certo ?
Olá!
void retangulo::setCoordenadasY(double *)
{
>>
void retangulo::setCoordenadasY(double *y)
{
Você esqueceu de adicionar o Y depois de (double , ficando (double y)...
É melhor sempre adicionar os nomes das variáveis, tanto no .h quando no .cpp, pois não tem jeito de errar com isso então... ou criar um .h para setar os nomes de variável a serem utilizados e então adicionar para mudar só nesse .h?? Hum... posso pensar nisso... boa ideia xD
OBS: Aprenda a usar um depurador (debugger) e a interpretar erros do seu compilador... ambos ajudam muito em horas de bugs/não compilação...
Abraços :D
@edit:
LoL, o código abaixo dá certo... mas não recomendo que façam isso pois fica difícil de saber o nome da variável... Para propósitos de exemplo somente xD
names.h
#ifndef NAMES_H
#define NAMES_H
// Defining names for variables
#define DOUBLE_COORD_X x
#define DOUBLE_COORD_Y y
#endif
retangulo.h
#ifndef RETANGULO_H
#define RETANGULO_H
#include "names.h"
class retangulo
{
public:
#endif // RETANGULO_H
retangulo.cpp
#include "retangulo.h"
retangulo::retangulo(double DOUBLE_COORD_X, double DOUBLE_COORD_Y)
{
void retangulo::setCoordenadasX(double *DOUBLE_COORD_X)
{
void retangulo::setCoordenadasY(double *DOUBLE_COORD_Y)
{
// ...
Isso facilitaria ao nomear variáveis... mas acho que deixa o código confuso, o que não segue ao padrão do KISS... então não façam isso xD