Is it possible to initialize an array in a member initializer list in C++?

So, I have this Game class, and I have an array of SDL_Rect's. I would like to initialize it in the member initializer list if that's possible, instead of initializing the array inside the constructor body.

//Game.h
#pragma once

class Game {
public:
  Game(SDL_Window* window, SDL_Renderer* renderer);

private:
  SDL_Rect down[4];
};

// Game.cpp
#include "Game.h"

Game::Game(SDL_Window* window, SDL_Renderer* renderer){
  down[0] = {1,4,31,48};
  down[1] = {35,5,25,47};
  down[2] = {65,4,31,48};
  down[3] = {100,5,26,47};
}

I would like to do something like this:

// Game.cpp
Game::Game()
: down[0]({1,4,31,48};
  // etc, etc...
{}

Answers


You could use direct-list-initialization(since c++11) for the member variable. (Not one of the element of the array.)

Game::Game()
: down {{1,4,31,48}, {35,5,25,47}, {65,4,31,48}, {100,5,26,47}}
{}

LIVE


There is no problem.

So it's a baffling question.

struct Rect { int x, y, width, height; };

struct Game
{
    Rect down[4] =
    {
        {1,4,31,48},
        {35,5,25,47},
        {65,4,31,48},
        {100,5,26,47},
    };
};

#include <iostream>
using namespace std;
auto main() -> int
{
    Game g;
    for( Rect const& rect : g.down )
    {
        cout << rect.x << ' ';
    }
    cout << endl;
}

In order to use a std::array instead of the raw array, which is generally a Good Idea™, and have the code compile with g++, add an inner set of braces to the initializer, like this:

std::array<Rect, 4> down =
{{
    {1,4,31,48},
    {35,5,25,47},
    {65,4,31,48},
    {100,5,26,47}
}};

Placing the initialization in a constructor's member initializer list (if for some reason that's desired, instead of the above) can then look like this:

#include <array>

struct Rect { int x, y, width, height; };

struct Game
{
    std::array<Rect, 4> down;

    Game()
        : down{{
            {1,4,31,48},
            {35,5,25,47},
            {65,4,31,48},
            {100,5,26,47}
        }}
    {}
};

#include <iostream>
using namespace std;
auto main() -> int
{
    Game g;
    for( Rect const& rect : g.down )
    {
        cout << rect.x << ' ';
    }
    cout << endl;
}

Need Your Help

Show message if javascript is not enabled in the browser

javascript html5 browser

I'm looking for a solution to show the visitor of my website an info message, if he has no javascript enabled. I tried it with a message in a div, that is visible by default but immediately hidden ...

How to create a jump menu in cakephp?

cakephp

Can anyone tell me how i can create a jump menu in cakephp? Just like the one we have in normal HTML!