Mario
Mario

Reputation: 93

Compiler error on array declaration?

How do I go about fixing these three errors?

Line that's having the issue and not liking [tickets]

int randomTickets[tickets][SIZE];

//global constants
const int SIZE = 6;                     //This is the number of balls per ticket
const int MAX_WHITE = 58;               //This is the range of the white balls
const int MAX_RED = 34;                 //This is the range of the red balls
const int waysToWin = 9;
int* newAr = new int[SIZE];

int main(int argc, const char * argv[])
{
    int tickets = displayMenu();        //Welcome screen lets you buy tickets
    int spending = tickets * 2;         //Charges you for the tickets
    int randomTickets[tickets][SIZE];
//code

Thanks in advance for your help!

Upvotes: 1

Views: 907

Answers (2)

user123
user123

Reputation: 9071

error C2057: expected constant expression

You can't declare randomTickets like that because the dimensions of the array need to be known at compile time. tickets is not a compile time constant and therefore you have the error. Consider using std::vector<T>:

std::vector<std::vector<int>> randomTickets(tickets, std::vector<int>(SIZE));

Alternatively, you can nest a std::array since SIZE is constant and known at compile time:

std::vector<std::array<int, SIZE>> randomTickets(tickets);

The other errors are resolved by fixing this one.

Upvotes: 3

barak manos
barak manos

Reputation: 30136

Variable tickets is not a constant expression, that's why.

Change int randomTickets[tickets][SIZE] as follows:

Array* randomTickets = new Array[tickets];

Outside of function main, declare the following type:

typedef int Array[SIZE];

You can use variable randomTickets as a "normal" 2-dimensional array from this point onwards, just don't forget to delete[] randomTickets when you're done...

Upvotes: 0

Related Questions