我已经尝试了几个小时。我找不到将固定大小的数组传递给运算符的方法。正如您在我的代码中看到的那样,我在stackoverflow上找到了一些东西,并尝试了这种方法,但它根本无法工作。任务是,如果数组的大小不为3,则不应编译代码,这意味着,如果数组的大小为2或大小为4,则应该得到编译错误。有人可以告诉我如何实施吗?提前致谢! :)
class Vec3 {
private:
int x, y, z;
public:
Vec3 (int x, int y, int z) : x(x), y(y), z(z) {}
int getX () const
{
return x;
}
int getY () const
{
return y;
}
int getZ () const
{
return z;
}
};
Vec3 operator+(Vec3 &vec, int (*arr)[3]) {
int x,y,z;
x = vec.getX() + (*arr)[0];
y = vec.getY() + (*arr)[1];
z = vec.getZ() + (*arr)[2];
Vec3 result(x,y,z);
return result;
}
int main () {
Vec3 v1 (1,2,3);
int v3 [] = {2,4,6};
cout << "v1 + v3 = " << v1 + v3 << endl;
return 0;
}
您的语法略有错误。代替
Vec3 operator+(Vec3 &vec, int (*arr)[3])
必须是
Vec3 operator+(Vec3 &vec, int (&arr)[3])
通过引用传递数组。您可以在数组访问之前删除运算符的值(*
),因此最终得到
Vec3 operator+(Vec3 &vec, int (&arr)[3]) {
int x,y,z;
x = vec.getX() + arr[0];
y = vec.getY() + arr[1];
z = vec.getZ() + arr[2];
Vec3 result(x,y,z);
return result;
}
使用模板来做:
template<size_t N>
Vec3 operator+(Vec3 &vec, int (&arr)[N]) {
static_assert(N==3,"wrong size of array");
// the rest of the code , small fix: arr[0] etc
当N不等于3时将触发静态断言。