2011-02-09 2 views
1

내 .h는 변수가 Texture ** skyboxTextures입니다. 나는 하나의 방법에서 약간의 텍스처 포인터를 할당하고 바로 사용할 :** varname []에 ** varname을 할당하는 중 문제가 발생했습니다. C++

Texture *skt[] = { 
    tleft, 
    tright, 
    tfront, 
    tback, 
    tup, 
    tdown 
}; 
skyboxTextures = skt; 

for(int i = 0; i < 6; i++) 
{ 
    skyboxTextures[i]->load(); 
} 

을 그리고 나중에 내가 다시 텍스처를 사용하려고 다른 방법으로.

이것은 내 개체에 더 이상 액세스 할 수없는 문제입니다. 이이 오류로 인해 컴파일되지 않습니다 :

error C2440: 'initializing' : cannot convert from 'Texture **' to 'Texture *[]' 

내가 줄 Texture *skt[] = skyboxTextures;을 주석하는 경우, 내가 할 모든 유효하지 않은 텍스처 포인터입니다.

+5

지구상에서 무엇을하려고합니까? –

+0

@Piotr 폭파 ... 어느 행성 같아요. –

+0

skyboxTextures는 6 개의 텍스처 포인터로 구성된 배열이며 내 skybox 객체는 그 자체를 그리는 방법을 알고 있습니다. 첫 번째 사용 텍스처는 맵을로드 할 때 텍스처 파일 이름을 읽을 때 사용됩니다. 두 번째 용도는 텍스처를 활성화하는 것입니다. 스카이 박스를 그릴 때 올바른 텍스처 이미지로 채워집니다. – TealFawn

답변

0

Then later in another method I try to use the textures again.

당신은 그렇게 할 수 없습니다. 배열을 첫 번째 요소에 대한 포인터로 변환하는 것은 한 가지 방법입니다. 배열이 여전히 배열 인 동안 컴파일러는 컴파일 타임에 사용할 수있는 배열의 크기와 같은 정보를 가지고 있습니다. 일단 포인터가되면 컴파일러는 더 이상 그 정보를 가지고 있지 않습니다.

skt을 참조하거나 skyboxTextures을 배열로 다시 변환하면 안됩니다. skyboxTextures[0]->activate();은 예상대로 작동해야합니다.

If I comment out the line Texture *skt[] = skyboxTextures;, all I get are invalid texture pointers.

내 생각 엔 문제가 여기에있다이다 : 당신은 당신이 다른 배열을 사용할 때 tleft, tright, tfront, tback, 대가리, 그리고 (Tdown)에가 유효한지 확인해야합니다

Texture *skt[] = { 
    tleft, 
    tright, 
    tfront, 
    tback, 
    tup, 
    tdown 
}; 

. 스택에 할당 한 것과 같은 작업을 수행 한 다음 skyboxTextures을 메서드에서 포인터로 반환하면 정의되지 않은 동작이 발생합니다. 아마도 힙 할당에 이러한 것들을 넣어야 할 것입니다.

1

배열을 할당 할 수 없습니다. 유감스럽게도 코드의 작은 조각 만 제공 했으므로 무엇을 제안해야할지 정확하게 알기가 어렵습니다. 나는 이것을 읽는 것이 좋습니다 : http://c-faq.com/aryptr/index.html.

0

틸,

이 광고 질감을 업데이트 시도 SKT * []의 skyboxTextures =;

to 질감 ** skt = skyboxTextures;

+0

하지만 텍스쳐에 텍스쳐를 넣으시겠습니까? – rajeshnair

+0

배열이라면'sizeof()'와 같은 것을 사용할 수 있습니다. –

관련 문제