C++ c+中运算符的固定大小数组+;

C++ c+中运算符的固定大小数组+;,c++,arrays,size,operator-keyword,fixed,C++,Arrays,Size,Operator Keyword,Fixed,我已经试了好几个小时了。我无法找到将固定大小的数组传递给运算符的方法。我在stackoverflow上找到了一些东西,并以这种方式进行了尝试,正如您在我的代码中看到的,但它根本不起作用。任务是,如果数组的大小不是3,则不应编译代码,这意味着,如果数组的大小是2或4,则应得到编译错误。有人能告诉我如何实现这一点吗?提前感谢!:) class-Vec3{ 私人: int x,y,z; 公众: Vec3(intx,inty,intz):x(x),y(y),z(z){ int getX()常量 { 返回

我已经试了好几个小时了。我无法找到将固定大小的数组传递给运算符的方法。我在stackoverflow上找到了一些东西,并以这种方式进行了尝试,正如您在我的代码中看到的,但它根本不起作用。任务是,如果数组的大小不是3,则不应编译代码,这意味着,如果数组的大小是2或4,则应得到编译错误。有人能告诉我如何实现这一点吗?提前感谢!:)

class-Vec3{
私人:
int x,y,z;
公众:
Vec3(intx,inty,intz):x(x),y(y),z(z){
int getX()常量
{
返回x;
}
int getY()常量
{
返回y;
}
int getZ()常量
{
返回z;
}
};
Vec3运算符+(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结果(x,y,z);
返回结果;
}
int main(){
vec3v1(1,2,3);
int v3[]={2,4,6};
不能使用模板执行此操作:

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 
模板
Vec3运算符+(Vec3&vec,int&arr)[N]){
静态_断言(N==3,“数组大小错误”);
//代码的其余部分,小补丁:arr[0]等
当N不等于3时,将触发静态断言

使用模板执行此操作:

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 
模板
Vec3运算符+(Vec3&vec,int&arr)[N]){
静态_断言(N==3,“数组大小错误”);
//代码的其余部分,小补丁:arr[0]等
当N不等于3时,将触发静态断言


语法有点错误。而不是

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;
}

语法有点错误。而不是

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;
}

这非常有效,我也理解了我代码中的错误!谢谢!这非常有效,我也理解了我代码中的错误!谢谢!