在我的.h中,我有一个变量Texture ** skyboxTextures
。我在一个方法中指定了一些纹理指针,并立即使用它们:
Texture *skt[] = {
tleft,
tright,
tfront,
tback,
tup,
tdown
};
skyboxTextures = skt;
for(int i = 0; i < 6; i++)
{
skyboxTextures[i]->load();
}
然后在另一种方法中我尝试再次使用纹理。
Texture *skt[] = skyboxTextures;
// Render the front quad
skyboxTextures[0]->activate();
这是我的问题我无法再访问我的对象了。由于此错误,这将无法编译:
error C2440: 'initializing' : cannot convert from 'Texture **' to 'Texture *[]'
如果我注释掉Texture *skt[] = skyboxTextures;
行,我得到的只是无效的纹理指针。
答案 0 :(得分:1)
您无法分配数组。不幸的是,很难确切知道建议的内容,因为您只提供了一小段代码。不过,我建议您阅读此内容:http://c-faq.com/aryptr/index.html。
答案 1 :(得分:0)
鸭,
尝试更新此行 纹理* skt [] = skyboxTextures;
要 纹理** skt = skyboxTextures;
答案 2 :(得分:0)
然后在另一种方法中我尝试再次使用纹理。
你做不到。将数组转换为指向它的第一个元素的指针是一个单向过程。虽然数组仍然是一个数组,但编译器的信息类似于编译时可用的数组大小。一旦它成为指针,编译器就不再拥有该信息。
您必须自己引用skt
,或者根本不将skyboxTextures
转换回数组。 skyboxTextures[0]->activate();
应该像您期望的那样工作。
如果我注释掉纹理* skt [] = skyboxTextures;,我得到的都是无效的纹理指针。
我的猜测是问题在于:
Texture *skt[] = {
tleft,
tright,
tfront,
tback,
tup,
tdown
};
使用其他阵列时,必须确保tleft,tright,tfront,tback,tup和tdown有效。如果您在堆栈上执行了类似的操作,然后将skyboxTextures
作为指针从您的方法返回,那么您将有未定义的行为。你可能不得不把这些放在堆分配上。