1

我得到一段代码如下:

 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 类创建一个对象,我需要传入一个函数指针。我试图谷歌搜索的原因,但没有得到太多。谁能告诉我我应该怎么做才能让它工作?

4

3 回答 3

3
class Collection{
  public:
    Ordered_list<int> list(less_than_f);
 };

在这里,您要声明一个带有 return 的函数Ordered_list<int>并采用类型的未命名参数less_than_f(Opss!无类型),而您希望拥有一个成员“ 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)  {}
   };
于 2013-01-25T08:09:43.500 回答
2

您的成员变量未正确声明。它不能像你在声明中那样被初始化。

试试这个:

 class Collection
 {
 public:
     Collection() : list(less_than_f) {}

     Ordered_list<int> list;
 };
于 2013-01-25T08:04:44.330 回答
2

类成员只能在声明中使用大括号初始化器进行初始化:

Ordered_list<int> list {less_than_f};

或使用=

Ordered_list<int> list = less_than_f;

(尽管后者仅起作用,因为您的构造函数不是explicit)。

在 2011 年之前(在撰写本文时,在大多数可用的编译器中),非静态类成员根本无法在其声明中初始化;需要一个构造函数:

Collection() : list(less_than_f) {}
于 2013-01-25T08:35:46.947 回答