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

Tyl*_*eau 7 c++ copy-constructor

我正在为CUDA处理编写一个矩阵类.

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

这是模板定义:

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

}
Run Code Online (Sandbox Code Playgroud)

应该注意的是,在Elements课堂上或课堂上都没有动态分配Matrix.

warning: base class ‘struct Elements<Elements<double, 2ul>, 2ul>’ should be explicitly initialized in the copy constructor在复制构造函数中收到警告.这是复制构造函数:

    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];
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

arn*_*rne 5

您没有在复制构造函数中初始化基类.试试这个:

Matrix(const Matrix & that) : Elements<Elements<T, N>, M>(that) {
    /* ... */
}
Run Code Online (Sandbox Code Playgroud)

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

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

typedef Elements<Elements<T, N>, M> basetype;
Run Code Online (Sandbox Code Playgroud)

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