尝试将** varname分配给* varname []时出现问题。 C ++

时间:2011-02-09 21:02:46

标签: c++

在我的.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;行,我得到的只是无效的纹理指针。

3 个答案:

答案 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作为指针从您的方法返回,那么您将有未定义的行为。你可能不得不把这些放在堆分配上。