C++模板类中的非法成员初始化

C++ illegal member initialization in template class

本文关键字:非法 成员 初始化 C++      更新时间:2023-10-16

我已经查看了一些关于 C++ 中非法成员初始化的类似问题,错误 C2614,但这似乎与我的问题不同。
我有一个模板类"Mat2D":

#pragma once
#include <iostream>
#include <iomanip>
#include <assert.h>
template<class T>
class Mat2D
{
private:
    int _rows;
    int _cols;
    T** _data;
public:
    Mat2D()
        :_rows(0), _cols(0), _data(NULL)
    {
    }
    Mat2D(const Mat2D<T>& rhs)
        :_rows(rhs._rows), _cols(rhs._cols)
    {
        cloneData(rhs._data);
    }
    Mat2D(int rows, int cols)
    {
        _rows = rows < 1 ? 1 : rows;
        _cols = cols < 1 ? 1 : cols;
        allocateData();
    }
    Mat2D(int rows, int cols, const T& initValue)
        :Mat2D(rows, cols) //--> error C2614:  'Mat2D<T>' : illegal member initialization: 'Mat2D<int>' is not a base or member 
    {
        all(initValue);
    }
    ~Mat2D()
    {
        for(int i = 0; i < _rows; i++)
            delete _data[i];
        delete _data;
    }
//...
};
Mat2D(int rows, int cols, const T& initValue)
    :Mat2D(rows, cols)

这可能不起作用,因为初始化列表仅适用于变量。尝试使用

Mat2D(int rows, int cols, const T& initValue)
    :_rows(rows), _cols(cols)

或在此函数中复制 Mat2D(int cols, int rows) 构造函数的内容。