정적 변수가있는 클래스가 있습니다. 나는 기본이 아닌 생성자를 필요로하기 때문에, 나는 조금 혼란 받고 있어요,하지만 난 내가 Object3D와 I를 만들 필요가 나는이 시점에서 잘기본 생성자가없는 정적 C++ 변수는 값을 잃습니다.
클래스
class Object3D{
public:
static Object3D ObjControl;
Object3D(); //this is here just for the initialization of the static variable
Object3D(Triangle *mesh);
Triangle *mesh;
};
을했다 희망 다음과 같이하십시오.
bool Engine::OnInit() {
if(SDL_Init(SDL_INIT_EVERYTHING) < 0) {
return false;
}
if((Surf_Display = SDL_SetVideoMode(WIDTH, HEIGTH, BBP, FLAGS)) == NULL) {
return false;
}
arma::colvec::fixed<3> upDirection;
upDirection << 0 << 1 << 0;
Camera cam(0.0, 0.0, 10.0, 10.0, 200.0, 90.0, upDirection);
Camera::CameraControl = cam;
arma::colvec::fixed<3> vertexA;
vertexA << -1 << 1 << 0;
arma::colvec::fixed<3> vertexB;
vertexB << 1 << 1 << 0;
arma::colvec::fixed<3> vertexC;
vertexC << 0 << -1 << 0;
Triangle tri(vertexA, vertexB, vertexC);
Triangle mesh[1];
mesh[0] = tri;
Object3D obj(mesh);
Object3D::ObjControl = obj; // PROBLEM! -> when the function extis from the OnInit ObjControl doesn't have anything inside.. it is like cleaned at the exit
return true;
}
문제는 반송 전에 주석에 삽입 된 것입니다.
그러면 아래와 같이 해당 객체를 렌더링 함수에 전달해야합니다. 나는 내가 정적 변수 뭔가 잘못하고 있다고 생각
void Engine::OnRender(){
Rendering.WfRender(Object3D::ObjControl, Surf_Display, 1);
}
을 초기화되지 않은 메모리의 위치에 접속을 시도하고 있기 때문에 응용 프로그램을 닫습니다,하지만 난 카메라 클래스의 정적 변수와 동일했다 , Engine :: OnInit에서 볼 수 있듯이 모든 것이 잘 작동합니다. 그래서 나는 어떤 일이 일어나는지 전혀 모른다.
예, 그렇습니다. 할당으로 와이어 프레임 렌더링을 코딩하고 있습니다. 마지막 제안에 감사드립니다. 어쨌든 예, 동적 할당 메모리와 스코프 물건에 조금 더 집중해야합니다. – KKyK
그래, 고쳐주었습니다. 정적 변수에 대해 뭔가를 깨닫지 못했습니다. 나는 초기화하고 있었지만 그것이 예정되어있는 방식으로 사용하지는 않았다. 어쨌든 이제는 괜찮습니다. 노력해 주셔서 감사합니다! 항상 여기에 게시하게되어 기쁩니다! :) – KKyK