c – 警告:应该在复制构造函数中明确初始化基类

前端之家收集整理的这篇文章主要介绍了c – 警告:应该在复制构造函数中明确初始化基类前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在为CUDA处理编写一个矩阵类.

我写了一个矢量类(以下称为Elements)并将其用于矩阵基础.

这是模板定义:

template <typename T,std::size_t M,std::size_t N>
class Matrix : public Elements< Elements< T,N >,M > {

}

应该注意的是,在Elements类和Matrix类中都没有动态分配任何内容.

我收到警告:基类’struct Elements< Elements< double,2ul>,2ul>’应该在复制构造函数的复制构造函数警告中显式初始化.这是复制构造函数

DEVICE HOST
    Matrix(const Matrix & that) {
        for (std::size_t ind = 0; ind < M; ind++) {
            for (std::size_t jnd = 0; jnd < N; jnd++) {
                (*this)[ind][jnd] = that[ind][jnd];
            }
        }
    }

我究竟做错了什么?

解决方法

您没有在复制构造函数中初始化基类.试试这个:
Matrix(const Matrix & that) : Elements<Elements<T,N>,M>(that) {
    /* ... */
}

派生类’复制构造函数的初始化列表应包含对基类’复制构造函数的显式调用,就像所有其他构造函数一样,否则,基类将默认初始化.

编辑:有一个私人可以很方便

typedef Elements<Elements<T,M> basetype;

在你的班级定义的某个地方.

猜你在找的C&C++相关文章