Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用模板重载运算符_C++_Templates_Assignment Operator - Fatal编程技术网

C++ 使用模板重载运算符

C++ 使用模板重载运算符,c++,templates,assignment-operator,C++,Templates,Assignment Operator,因此,在使用模板时,我遇到了重载赋值运算符的问题。基本上,我采用的是一个自定义的可调整大小的数组类,它由另一个没有调整大小能力的数组类继承。无论如何,我有两个相等运算符,一个用于处理相同大小的数组,另一个用于处理不同大小的数组,只要类型相同 以下是操作员的代码: // operator = // template <typename T, size_t N> const Fixed_Array <T, N> & Fixed_Array <T, N>::

因此,在使用模板时,我遇到了重载赋值运算符的问题。基本上,我采用的是一个自定义的可调整大小的数组类,它由另一个没有调整大小能力的数组类继承。无论如何,我有两个相等运算符,一个用于处理相同大小的数组,另一个用于处理不同大小的数组,只要类型相同

以下是操作员的代码:

// operator =
//
template <typename T, size_t N>
const Fixed_Array <T, N> & Fixed_Array <T, N>::operator = (const Fixed_Array <T, N> & rhs)
{
    for(size_t x = 0; x < N; x++)
    {
        this->set(x, rhs[x]);
    }
    return *this;
}

//
// operator =
//
template <typename T, size_t N>
template <size_t M>
const Fixed_Array <T, N> & Fixed_Array <T, N>::operator = (const Fixed_Array <T, M> & rhs)
{
    this->resize(M);
    for(size_t x = 0; x < M; x++)
    {
        this->set(x, rhs[x]);
    }
    return *this;
}
//运算符=
//
模板
常量固定数组和固定数组::运算符=(常量固定数组和rhs)
{
对于(大小x=0;x设置(x,rhs[x]);
}
归还*这个;
}
//
//接线员=
//
模板
模板
常量固定数组和固定数组::运算符=(常量固定数组和rhs)
{
这个->调整大小(M);
对于(大小x=0;x设置(x,rhs[x]);
}
归还*这个;
}
下面是我用来创建和分配的内容:

    Fixed_Array<char, 10> * fa1 = new Fixed_Array<char, 10>();
    Fixed_Array<char, 20> * fa2 = new Fixed_Array<char, 20>();
fa1 = fa1; //works
fa1 = fa2; //causes compiler to freak out
Fixed_数组*fa1=新的Fixed_数组();
Fixed_数组*fa2=新的Fixed_数组();
fa1=fa1//作品
fa1=fa2//导致编译器崩溃
错误信息基本上是说我不能用10和20来做这件事;它不会用模板接收我的第二个赋值运算符


有什么建议吗?

您指定的是指针,而不是对象(造成内存泄漏的副作用!)。指针有不同的类型(
),所以编译器会对此抱怨

您的
运算符=
签名似乎正确,赋值语法应为:

*fa1 = *fa2; // ok  (no memory leak)

对于一个应该具有固定大小的类,如何调用
resize
?这不会破坏东西吗

比如说,

Fixed_Array<char, 10> little1;
Fixed_Array<char, 20> big1, big2;

big1 = little1;
/* now big1 has size 10, because it was resized */
big1 = big2; /* tries to store 20 elements into a buffer of size 10 */
Fixed_数组little1;
固定_数组big1,big2;
big1=little1;
/*现在big1的大小为10,因为它已调整大小*/
big1=big2;/*尝试将20个元素存储到大小为10的缓冲区中*/

这将损坏堆(形式上,这是未定义的行为)。

我看不出有任何理由不应该执行
修复\u数组fa1(对于
fa2
)也是如此。然后您实际上可以使用
fa1=fa2
。这就像
int
:你不会做
int*p=newintinti