所以这是我的问题,我试图学习一些代码,我只是在玩改变和探索一些新的方法来编写它,但我意识到如果{}的声明不是最后一个变量它不起作用, (如果我改变了m_belowScene和m_overscene的位置,那就可以了。)
我的修改:
public function myFunc(int $id) : string
{
$statement = self::$db->prepare("Some query WHERE id = ?");
$statement->bind_param("i", $id);
$statement->execute();
$result = $statement->get_result();
return $result;
}
正确的方法是这个
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>());
答案 0 :(得分:4)
您必须区分构造函数的初始化列表和 body 。至于tobi303指出,这些不能混合。
编写构造函数的语法是
Class::Class(<parameters>) : <initializer list> { <body> }
<body>
以&#39; {&#39;。
在初始值设定项列表中,变量的格式为variable(value)
考虑班级
class foo {
int x;
int y;
int z;
foo(int value_x, int value_y);
};
构造函数可能定义如下:
foo::foo(int value_x, int value_y) :
x(value_x),
y(value_y),
z(1)
{
}
如果你想添加另一个变量v
,并用一些值初始化它,你必须把它放在初始化列表中这样(注意括号):
foo::foo(int value_x, int value_y) :
x(value_x),
y(value_y),
z(1),
v(42)
{
}
在体内,可以使用更复杂的操作。因此,您的示例显示了variable = value
形式的赋值语句。
但是,赋值语句只能在正文中使用,而不能在初始化列表中使用。同样,表单variable(value)
的初始化在正文中不允许
因此,您必须注意在哪个地方使用哪种形式。
另见关于这些形式的变量初始化之间差异的以下问题: