viciado 1 Denunciar post Postado Abril 11, 2011 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 ? Compartilhar este post Link para o post Compartilhar em outros sites
Renato Utsch 24 Denunciar post Postado Abril 11, 2011 Olá! void retangulo::setCoordenadasY(double *) { coordY[0] = y[0]; coordY[1] = y[1]; } >> void retangulo::setCoordenadasY(double *y) { coordY[0] = y[0]; coordY[1] = y[1]; } 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: retangulo(double *DOUBLE_COORD_X, double *DOUBLE_COORD_Y); void setCoordenadasX(double *DOUBLE_COORD_X); void setCoordenadasY(double *DOUBLE_COORD_Y); 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 *DOUBLE_COORD_X, double *DOUBLE_COORD_Y) { coordX[0] = x[0]; coordX[1] = x[1]; coordY[0] = y[0]; coordY[1] = y[1]; } void retangulo::setCoordenadasX(double *DOUBLE_COORD_X) { coordX[0] = x[0]; coordX[1] = x[1]; } void retangulo::setCoordenadasY(double *DOUBLE_COORD_Y) { coordY[0] = y[0]; coordY[1] = y[1]; } // ... 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 Compartilhar este post Link para o post Compartilhar em outros sites