2016-08-19 136 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)的初始化是而不是允许在身体。

因此,您必须注意您在哪个地方使用哪种表单。

又见这些表格变量初始化之间的差异以下问题: