2016-08-19 124 views
0

因此,這裏是我的問題,即時嘗試學習一些代碼,我只是在玩變化和探索一些新的寫法,但我意識到如果聲明與{是不是最後一個變量,它不工作,(如果我改變m_belowScene和m_overscene的地方它的工作壽)。在構造函數中初始化變量的正確順序

我的修改:

SceneManager::SceneManager() 
    : m_scene(std::make_shared<PolyGraphicNode>()), 
     m_cplSign(std::make_shared<CPLSymbol>(0.05, 0.2, 0.5)), 
     m_belowScene(std::make_shared<PolyGraphicNode>()){ 
     std::shared_ptr<CPLSymbol> symbol = std::make_shared<CPLSymbol>(0.01, 0.04, 0.1, CPL_NODE); 
     m_belowScene->append(symbol); 
     } 
     m_overScene(std::make_shared<PolyGraphicNode>()); 

的正確方法是這樣的

SceneManager::SceneManager() 
: m_scene(std::make_shared<PolyGraphicNode>()), 
    m_cplSign(std::make_shared<CPLSymbol>(0.05, 0.2, 0.5)), 

    m_overScene(std::make_shared<PolyGraphicNode>()), 
    m_belowScene(std::make_shared<PolyGraphicNode>()){ 
    std::shared_ptr<CPLSymbol> symbol = std::make_shared<CPLSymbol>(0.01, 0.04, 0.1, CPL_NODE); 
    m_belowScene->append(symbol); 
    } 
+3

初始化列表的結束位置構造的身體開始。你不能混合起來 – user463035818

+3

聲明的順序,而不是(!)初始化程序列表中的順序是相關的 –

回答

4

你有初始化列表身體構造的區分。至於tobi303指出,這些不能混用。

寫一個構造函數的語法是

Class::Class(<parameters>) : <initializer list> { <body> } 

<body>開始用 '{'。

foo::foo(int value_x, int value_y) : 
    x(value_x), 
    y(value_y), 
    z(1) 
{ 
} 

如果你想:

在初始化列表中,變量形式variable(value)

考慮類

class foo { 
    int x; 
    int y; 
    int z; 

    foo(int value_x, int value_y); 
}; 

的構造可能這樣定義賦值添加另一個變量v,並用某個值初始化它,你必須像這樣將它放入初始化器列表中(注意brac e):

foo::foo(int value_x, int value_y) : 
    x(value_x), 
    y(value_y), 
    z(1), 
    v(42) 
{ 
} 

在體內,可以使用更復雜的操作。因此,您的示例顯示的分配報表variable = value。 但是,賦值語句只能在主體中使用,而不能在初始化程序列表中使用。同樣,形式variable(value)的初始化是而不是允許在身體。

因此,您必須注意您在哪個地方使用哪種表單。

又見這些表格變量初始化之間的差異以下問題:

相關問題