Reputation: 15294
I have defined a POD type as below:
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}};
}
It does not compile, and tell me:
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}};
Edit: Test Code
Upvotes: 0
Views: 182
Reputation: 227438
You have a missing set of braces (the data member is a single array) and you need to make the data member public, because an aggregate cannot have private or protected members.
This is a simplified, working example:
#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}} };
}
Upvotes: 2