使用初始化列表的 POD 类型初始化不起作用
POD type initialization using initialization list does not work
我定义了一个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}} };
}
相关文章:
- 无法使用类型 'const char *' 的左值初始化类型 'char *' 的成员子对象
- "const wchar_t *" 类型的值不能用于初始化类型 "const PWSTR" 的实体
- Visual Studio C++:不能使用类型为 "const wchar_t *" 的值来初始化类型为 "TCHAR *" 的实体
- 为什么我总是收到此错误:从类型为"农场动物"的右值初始化类型的非常量引用无效|
- 无法使用类型为"结构节点 *"的左值初始化类型为"结构节点 *"的参数
- C++ 解决方法:"从类型"B*"的表达式初始化类型"C*&"的引用无效"
- 零初始化类型
- 回调方法显示错误,类型为"void(*)"的值不能用于初始化类型的实体
- C++ 重载和覆盖 - 无法使用类型的右值初始化类型的参数
- 类型值不能用于初始化类型实体
- 无效初始化类型的 BinaryNode *& 的非常量引用
- 从类型 'Matrix&' 的右值初始化 类型的非 const 引用无效 'Matrix'
- 无法汇总初始化类型结构的变量,其中包含在类模板中的位字段成员
- 直接或通过构造函数初始化类型的类
- 无法使用 'Shape *' 类型的左值初始化类型 'Shape Shape::*' 的返回对象
- C++:从类型"int*"的表达式初始化类型"const int*&"的引用无效
- 从类型为"矩阵"的右值初始化类型为"矩阵"的非常量引用无效
- 无法使用类型 'const char [X]' 的左值初始化类型 'const signed char *' 的成员子对象
- C 我可以用双重初始化类型浮点的变量
- 无法识别初始化类型