我正在为Uni中的C ++类简介制作一个小型OpenGL程序。我有一个完整的程序,但我想稍微改变它以使其更加独特。我有一个Cube类:
class Cube {
public:
Cube(Mesh* mesh, Texture2D* texture, float x, float y, float z);
~Cube();
void Draw();
void Update(float rSpeed);
Vector3 position;
private:
GLfloat rotationSpeed;
Vector3 rotationVector;
Mesh* _mesh;
Texture2D* _texture;
};
然后我创建了一个Cube类型的数组:
Cube* cubes[CUBE_AMOUNT];
然后我用数据填充此数组的每个索引,以便稍后在程序中在屏幕上绘制多维数据集:
for (int i = 0; i < CUBE_AMOUNT; i++) {
float x = ((rand() % 400) / 10.0f) - 20.0f;
float y = ((rand() % 200) / 10.0f) - 10.0f;
float z = -(rand() % 1000);
if (i % 2 == 1) {
cubes[i] = new Cube(cubeMesh, textureStars, x, y, z);
}
else {
cubes[i] = new Cube(cubeMesh, texturePenguins, x, y, z);
}
}
有了这个我要添加到程序中的新东西,我想检查cube []的索引是否已经填充了数据。但是我在运行时不断遇到异常。我试图检查cubes [i]是否等于nullptr,并尝试检查它是否也是NULL,但似乎都不匹配。
对于我使用的术语中的任何错误,我们深表歉意。 C ++的新手,并且在此之前只是来自Python,它令人困惑!
解决方案:
当我创建数组时,我将其更改为Cube* cubes[CUBE_AMOUNT] = { NULL }
,现在检查数组时cubes[i] == NULL
!
答案 0 :(得分:1)
如果cubes
不是全局变量,您可以使用:
Cube* cubes[CUBE_AMOUNT] = {};
将所有元素初始化为nullptr
。
您也可以使用:
std::vector<std::unique_ptr<Cube>> cubes(CUBE_AMOUNT);
消除了必须在代码中释放动态内存的负担。
在任何一种情况下,都可以使用:
if ( cubes[index] )
{
// Got a valid pointer. Use it.
}
答案 1 :(得分:0)
您的cubes
变量不会使用null_ptr自动初始化。直到你用null_ptr或好的指针填充它,它最初指向随机垃圾。
答案 2 :(得分:0)
我认为这会起作用
//This bit should check if theres anything stored currently.
cout << "\nWhich Slot would you like to store the informaton in ?(1-10)";
cin >> i;
i--;
if (information[i] != NULL){
// Already written
cout << "THERES SOMETHING HERE";
}
else{
cout << "\nEMPTY!!!!!!!!!";
}