1.当我为类Basket 创建了一个成员类型为 multiset 的时候, 指定compare使用multiset
构造发生问题。
2.程序代码如下:
class Basket
{
private:
static bool comp(const std::shared_ptr<Quote> &lhs,
const std::shared_ptr<Quote> &rhs);
std::multiset<std::shared_ptr<Quote>, decltype(comp) *>
_items{comp};
/*
error: ‘comp’ is not a type
_items(comp);
std::multiset<std::shared_ptr<Quote>, decltype(comp) *>
_items(comp);
*/
}
3.编译指令:
g++ -s -std=c++11 -w -Wall -Werror quote.cc -o quote.so
4.报错信息:
使用()调用multiset的构造函数会出错, 但是使用{} 就能正确, 这是什么道理?
quote.h:226:24: error: ‘comp’ is not a type
_items(comp);
通过default member initializer来初始化数据成员只有两种合法写法,第一种是list initialization,即一对花括号。第二种是copy initialization,即等号。
如果你尝试用圆括号,编译器会把这行声明当作函数声明来处理。所以报“comp不是类型”的语法错误。