Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

C++ Making a 2D boolean matrix

I am making a program where I have 2 vectors (clientvec and productslist) and I need to create a 2D boolean matrix where the columns is the size of productslist vector and the lines is the size of clientvec vector, but it gives me this error:

"expression must have a constant value"

Here is the code I used:

unsigned int lines = clientvec.size();
unsigned int columns = productslist.size();
bool matrixPublicity[lines][columns] = {false};

Pls help me..

Edit: I am new at c++ so assume I know nothing xD

Edit2: I already know for the answers that I cannot initialize an array with non constant values, now the question is how can I put them after initialize...

like image 511
J. Seixas Avatar asked Jan 27 '26 16:01

J. Seixas


1 Answers

The error message is clear: :expression must have a constant value"

It means the array dimension cannot be of variable type. Only enums or pre-processor defined constants are valid.

See for more info: Why can't I initialize a variable-sized array?

Edit: Since you mentioned you are new to C++, here is a piece of code that might help you:

#include <iostream>
#include <vector>
#include <bitset>

int main()
{
    unsigned int lines = 10;
    const unsigned int columns = 5;

    std::vector<std::bitset<columns>> matrixPublicity;
    matrixPublicity.resize(lines);

    for(int i=0; i < lines; i++)
    {
        for(int j=0; j < columns; j++)
            std::cout << matrixPublicity[i][j] <<' ';
        std::cout<<'\n';
    }
}

note that in this case, columns must be constant.

Edit 2: And if the size of lines are not the same, then you must stick to vector types:

typedef std::vector<bool> matrixLine;
std::vector<matrixLine> matrixPublicity;

now you can use resize method for the i-th line of the matrix, e.g.

matrixPublicity[1].resize(number_of_columns_in_line_2);
like image 161
polfosol ఠ_ఠ Avatar answered Jan 30 '26 06:01

polfosol ఠ_ఠ