为什么这段代码不正确?
class Method
{
public:
Method(decltype(info2) info1);
virtual ~Method(){}
protected:
QSharedPointer<info> info2;
};
但是这段代码是正确的:
class Method
{
public:
virtual ~Method(){}
protected:
QSharedPointer<info> info2;
public:
Method(decltype(info2) info1);
};
为什么类构造函数的位置很重要? 我认为定义类构造函数的位置并不重要。
答案 0 :(得分:1)
我认为标准的这一部分是相关的 [basic.scope.class] /1.1 :
在类中声明的名称的潜在范围不仅包括后面的声明性区域 name的声明点,但也包括所有函数体,默认参数, 异常规范 S, 和 大括号或相等-初始化 该类中的非静态数据成员(包括嵌套中的这些内容) 类)。
请注意,它仅提及默认参数。所以这是有效的,因为decltype在默认参数中引用:
Method(QSharedPointer<int> info1 = decltype(info2)())
这也有效,因为它在体内:
Method(<...>)
{
decltype(info2) info3;
}
但是你的例子不起作用,因为我引用的段落没有涵盖这种decltype的位置,因此名称info2
被认为超出了范围。
答案 1 :(得分:0)
QSharedPointer的地方info2;
很重要。 &#39; INFO2&#39;应该在将它用于decltype(http://en.cppreference.com/w/cpp/language/decltype)之前定义。
接下来也不行:
$start = new DateTime($giris);
$end = new DateTime($cikis);
$interval = DateInterval::createFromDateString('1 day');
$period = new DatePeriod($start, $interval, $end);
foreach ($period as $dt) {
$datex = $dt->format("Y-m-d"). PHP_EOL;
$sorgu = mysql_query("SELECT * FROM takvimler WHERE `date`='$datex'");
$veri = mysql_fetch_assoc($sorgu);
$don = $veri['price'];
echo $don;
}