我得到了一段代码如下:
template <typename T>
class Ordered_list{
public:
Ordered_list(bool (*less_than_function)(const T&, const T&)): less_than(less_than_function){}
private:
bool (*less_than) (const T&, const T&);
};
bool less_than_f(const int& i1, const int& i2){
return i1 < i2;
}
class Collection{
public:
Ordered_list<int> list(less_than_f);
};
代码无法编译,我收到错误:
test.cpp:16: error: 'less_than_f' is not a type
我试图为Ordered_list类创建一个对象,我需要在函数指针中传递它。我试图谷歌的原因,但没有得到太多。 Anybode可以告诉我应该怎样做才能使它工作?
答案 0 :(得分:3)
class Collection{
public:
Ordered_list<int> list(less_than_f);
};
在这里,您声明一个返回Ordered_list<int>
的函数,并采用类型为less_than_f
的非参数参数(Opss!no type),而您希望拥有一个成员“list
”。你需要在构造函数的初始化列表中初始化它(因为Ordered_list
没有默认的构造函数)[嗯..不确定要初始化的C ++ 11新选项,但现在不在VC2012中]。
class Collection{
public:
Ordered_list<int> list;
Collection (): list(less_than_f){}
explicit Collection ( bool (*less_than_function)(const int& i1, const int& i2) )
: list(less_than_function) {}
};
答案 1 :(得分:2)
您的成员变量未正确声明。它无法在声明中进行初始化。
试试这个:
class Collection
{
public:
Collection() : list(less_than_f) {}
Ordered_list<int> list;
};
答案 2 :(得分:2)
类成员只能使用大括号初始化器在其声明中初始化:
Ordered_list<int> list {less_than_f};
或使用=
:
Ordered_list<int> list = less_than_f;
(虽然后者只能起作用,因为你的构造函数不是explicit
)。
在2011年之前(并且在撰写本文时,在大多数可用的编译器中),非静态类成员根本无法在其声明中初始化;需要一个构造函数:
Collection() : list(less_than_f) {}