Calling on an element of a matrix class

The line:

Code:

`sum += (gauss[x + 2][y + 2] = exp(-(x * x + y * y) / s) / s / M_PI);`

cannot be compiled.

which says:

Code:

`1>e:\projects\c++\edge_detect\edge_detect\Matrix.h(14): error C2059: syntax error : '['`

1> e:\projects\c++\edge_detect\edge_detect\Matrix.h(17) : see reference to class template instantiation 'matrix<T,D0,D1>' being compiled

How can I access the following class by the [] or [][] operator and access the matrix by row or element?

Code:

`template<typename T, int D0, int D1>`

class matrix

{

public:

matrix();

matrix(const D3DXVECTOR2& m0, const D3DXVECTOR2& m1);

matrix(const D3DXVECTOR3& m0, const D3DXVECTOR3& m1, const D3DXVECTOR3& m2);

float[4]& operator[](int row) const;

float m[4][4];

};

Code:

`matrix<float, 5, 5> gaussian_kernel(float sigma) `

{

matrix<float, 5, 5> gauss;

float sum = 0, s = 2 * sigma * sigma;

for (int x = -2; x <= 2; x++)

for (int y = -2; y <= 2; y++)

sum += (gauss[x + 2][y + 2] = exp(-(x * x + y * y) / s) / s / M_PI);

for (auto& row : gauss)

for (auto& x : row)

x /= sum;

return gauss;

}

Re: Calling on an element of a matrix class

Quote:

Originally Posted by

**luckiejacky**
The line:

Code:

`sum += (gauss[x + 2][y + 2] = exp(-(x * x + y * y) / s) / s / M_PI);`

cannot be compiled.

Since the matrix class represents no abstraction why not access the m member, like

Code:

`sum += (gauss.`**m**[x + 2][y + 2] = exp(-(x * x + y * y) / s) / s / M_PI);

Re: Calling on an element of a matrix class

The original definition of the matrix is:

Code:

`template<class T, size_t Rows, size_t Cols> using matrix = std::array<std::array<T, Cols>, Rows>;`

I was unable to compie this with some low-end compilers. Should I use my method to adapt to this class, or should I seek another workaround to make this matrix class work again?

thanks

Jack

Re: Calling on an element of a matrix class

Quote:

Originally Posted by

**luckiejacky**
The original definition of the matrix is:

Code:

`template<class T, size_t Rows, size_t Cols> using matrix = std::array<std::array<T, Cols>, Rows>;`

I was unable to compie this with some low-end compilers. Should I use my method to adapt to this class, or should I seek another workaround to make this matrix class work again?

That's a nice solution and it allows for [][] accesses. It compiles with the latest VS 2017 compiler, can't you upgrade?

If not, your current matrix class approach will work with an older compiler, like

Code:

`template<class T, size_t R, size_t C> // you possibly need to use int rather than size_t`

class matrix {

public:

T data[R][C];

};

//

matrix<int, 4, 4> gauss;

gauss.data[0][0] = 1; // works

Re: Calling on an element of a matrix class

Re: Calling on an element of a matrix class

A way to make your operator[] work is to implement it as follows:

Code:

`template<typename T, int D0, int D1>`

class matrix

{

public:

matrix() {};

T* operator[](int row) { return m[row]; }

T m[4][4];

};