SoloCodigo
Programación General => C/C++ => Mensaje iniciado por: moesan en Jueves 5 de Mayo de 2011, 16:53
-
Hola, soy nuevo en la programación de clases de C++, aunque llevo algo de tiempo programando en Java. Estoy programando algo sencillo para entrar en materia, y me he encontrado con algo que no entiendo.
El caso es el siguiente: Creo una clase Vértice, que contiene 3 variables privadas x, y y z, y una clase Poligono, que contiene un vector de tres vértices como variable privada. Lo que no entiendo es que, cuando intento modificar alguna de las variables (por ejemplo x) de uno de los vertices del vector de poligonos, ésta no se modifica y mantiene su valor inicial. És decir, cuando programo lo siguiente:
poligono p;
(...)
p.getVer(0).setX(1.0);
Al imprimir por pantalla esto:
cout << p.getVer(0).getX();
Me imprime por pantalla 0.0 (que es el valor por defecto) en lugar de 1.0.
Esto es normal?
P.D.: En caso de que haya dado pocos detalles sobre el código avisadme, y pondré la clase entera.
-
Debes tener algo mal en el metodo setx de tu clase, si es necesario que publiques el codigo de tu clase, para saber en donde esta el problema porque no es normal lo que mencionas.
Saludos :)
-
Hola profesorX, gracias por contestar. Aquí tienes las clases:
Vertice.h
#include <GL/gl.h>
#include <GL/glut.h>
class Vertex {
private:
GLfloat x, y, z;
public:
Vertex();
Vertex(GLfloat, GLfloat, GLfloat);
GLfloat getX();
GLfloat getY();
GLfloat getZ();
void setX(GLfloat);
void setY(GLfloat);
void setZ(GLfloat);
};
Vertice.cpp
#include "vertice.h"
Vertex::Vertex(){
}
Vertex::Vertex(GLfloat x, GLfloat y, GLfloat z){
this->x = x;
this->y = y;
this->z = z;
}
GLfloat Vertex::getX(){
return this->x;
}
GLfloat Vertex::getY(){
return this->y;
}
GLfloat Vertex::getZ(){
return this->z;
}
void Vertex::setX(GLfloat x){
this->x = x;
}
void Vertex::setY(GLfloat y){
this->y = y;
}
void Vertex::setZ(GLfloat z){
this->z = z;
}
polygon.h
#include "vertice.h"
class Polygon {
private:
Vertex v[3]; //Vector que contiene los tres vertices del poligono
public:
Polygon(); //Constructores
Polygon(Vertex*);
Vertex getVer(int);
};
polygon.cpp
#include "polygon.h"
Polygon::Polygon(){
for(int i = 0 ; i < 3 ; i++){
this->v.setX(0.0);
this->v.setY(0.0);
this->v.setZ(0.0);
}
}
Polygon::Polygon(Vertex *v){
this->v[0] = v[0];
this->v[1] = v[1];
this->v[2] = v[2];
}
Vertex Polygon::getVer(int n){
return this->v[n];
}
main.cpp
#include <iostream>
#include "polygon.h"
using namespace std;
int main(){
Polygon p;
p.getVer(0).setX(1.0);
p.getVer(0).setY(1.0);
p.getVer(0).setZ(1.0);
cout<< "Valor del vertice 0: (" << p.getVer(0).getX() << "," << p.getVer(0).getY() << "," << p.getVer(0).getZ()<<")."<<endl;
return 0;
}
Al compilar main, devuelve lo siguiente:
Valor del vertice 0: (0,0,0).
Así que no se han modificado las coordenadas... Alguna idea sobre que es lo que pasa?
Muchas gracias.