5

So, I have this Game class, and I have an array of SDL_Rects. 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...
{}
0

2 Answers 2

5

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

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

LIVE

Sign up to request clarification or add additional context in comments.

1 Comment

Sorry if that unfinished comment lingered too long before I managed to remove it. This is an OK answer as far as it goes.
2

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;
}

1 Comment

I agree, I was trying to get a build environment setup to test it since I figured I must be missing something.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.