gpt4 book ai didi

C++ 结构指针数组

转载 作者:太空宇宙 更新时间:2023-11-04 15:43:50 25 4
gpt4 key购买 nike

我想定义结构指针的动态数组我有 box2d 结构:

struct b2Vec2
{
/// Default constructor does nothing (for performance).
b2Vec2() {}

/// Construct using coordinates.
b2Vec2(float32 x, float32 y) : x(x), y(y) {}

/// Set this vector to all zeros.
void SetZero() { x = 0.0f; y = 0.0f; }

/// Set this vector to some specified coordinates.
void Set(float32 x_, float32 y_) { x = x_; y = y_; }

/// Negate this vector.
b2Vec2 operator -() const { b2Vec2 v; v.Set(-x, -y); return v; }

/// Read from and indexed element.
float32 operator () (int32 i) const
{
return (&x)[i];
}

/// Write to an indexed element.
float32& operator () (int32 i)
{
return (&x)[i];
}

/// Add a vector to this vector.
void operator += (const b2Vec2& v)
{
x += v.x; y += v.y;
}

/// Subtract a vector from this vector.
void operator -= (const b2Vec2& v)
{
x -= v.x; y -= v.y;
}

/// Multiply this vector by a scalar.
void operator *= (float32 a)
{
x *= a; y *= a;
}

/// Get the length of this vector (the norm).
float32 Length() const
{
return b2Sqrt(x * x + y * y);
}

/// Get the length squared. For performance, use this instead of
/// b2Vec2::Length (if possible).
float32 LengthSquared() const
{
return x * x + y * y;
}

/// Convert this vector into a unit vector. Returns the length.
float32 Normalize()
{
float32 length = Length();
if (length < b2_epsilon)
{
return 0.0f;
}
float32 invLength = 1.0f / length;
x *= invLength;
y *= invLength;

return length;
}

/// Does this vector contain finite coordinates?
bool IsValid() const
{
return b2IsValid(x) && b2IsValid(y);
}

/// Get the skew vector such that dot(skew_vec, other) == cross(vec, other)
b2Vec2 Skew() const
{
return b2Vec2(-y, x);
}

float32 x, y;
};

在c++文件中我想定义b2Vec2的数组当我尝试使用新的 b2Vec2 结构设置数组时出现错误:

error C2679: binary '=' : no operator found which takes a right-hand operand of type 'b2Vec2 *' (or there is no acceptable conversion)   


b2Vec2 *vertices = new b2Vec2[buffer.size()]; // its int number > 0
int verticeslength = polygon->buffer.size();
for (int ii=0, nn=verticeslength; ii<nn; ii++) {
vertices[ii] = new b2Vec2(); // This is where the error .
}

我做错了什么?

最佳答案

你错过了两个*:

b2Vec2 **vertices = new b2Vec2*[buffer.size()];
^ ^

但是,最好使用 std::vector 而不是 basre 指针。

std::size_t N = buffer.size();

std::vector<std::vector<b2Vec2>> vertices (N, std::vector<b2Vec2>(N));

关于C++ 结构指针数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19894973/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com