2015-11-30 82 views
2

所以,我有這個遊戲類,我有一個SDL_Rect的數組。我想在成員初始化列表中初始化它,如果可能的話,而不是初始化構造函數體內的數組。是否可以在C++的成員初始值設定項列表中初始化一個數組?

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

我願做這樣的事情:

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

回答

2

是沒有問題的。

所以這是一個令人困惑的問題。

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

爲了使用一個std::array而不是原始陣列,其通常是一個好主意™的,並讓代碼編譯與克++,添加一個內部的一組括號到初始化,這樣:

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

配售初始化在構造函數的成員初始化列表(如果給那些期望的,而不是上述某種原因),那麼可以看看像這樣:

#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; 
} 
+0

我同意,我試圖讓一個構建環境設置來測試它,因爲我想我必須失去了一些東西。 – markshancock

3

您可以使用direct-list-initialization(因爲C++ 11)成員變量。 (數組的元素一個也沒有。)

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

LIVE

+0

對不起,如果這個未完成的評論在我設法刪除它之前徘徊了太久。就它而言,這是一個好的答案。 –

相關問題