使用初始化列表的 POD 类型初始化不起作用

POD type initialization using initialization list does not work

本文关键字:初始化 类型 不起作用 POD 列表      更新时间:2023-10-16

我定义了一个POD类型,如下所示:

template<typename kernelEntryT, size_t kernelRowSize, size_t kernelColSize>
class ImageProcessing::Kernel {
    kernelEntryT kernelMatrix[kernelRowSize][kernelColSize];
};
int main(){
    ImageProcessing::Kernel<int,3,3> k = {{0,0,0},{0,1,0},{0,0,0}};
}

它不编译,并告诉我:

error: could not convert ‘{{0, 0, 0}, {0, 1, 0}, {0, 0, 0}}’ from ‘<brace-enclosed initializer list>’ to ‘ImageProcessing::Kernel<int, 3ul, 3ul>’
     ImageProcessing::Kernel<int,3,3> k = {{0,0,0},{0,1,0},{0,0,0}};

编辑:测试代码

缺少一组大括号(数据成员是单个数组),并且需要将数据成员设为公共,因为聚合不能具有私有或受保护的成员。

这是一个简化的工作示例:

#include <cstddef> // for std::size_t
template<typename T, std::size_t N, std::size_t M>
class Kernel {
 public:
    T kernelMatrix[N][M];
};
int main(){
    Kernel<int,3,3> k = { {{0,0,0}, {0,1,0}, {0,0,0}} };
}
相关文章: