"Function"不是C++型

"Function" is not a type C++

本文关键字:C++ 不是 Function      更新时间:2023-10-16

我想创建一个模板类并传递给它一个比较函数。我在这个链接上找到了一个很好的答案

不幸的是,当我制作一个名为"WaitingQueue"的模板类并在类的构造函数(在类 foo 中)中传递比较函数时,代码无法编译并抛出错误:"'比较'不是一种类型"。

我无法理解这里的错误。上面链接中的代码运行没有错误。谁能告诉我我在这里做错了什么?提前致谢

#include <stdint.h>
#include <stddef.h>
#include <string.h>
enum { OK, ERROR };

template <class T>
class WaitingQueue
{
   struct QueueElement
   {
      public:
      T                   data;
      QueueElement       *next;
      QueueElement(T *pdata): next(0)
      {
          memcpy(&data, pdata, sizeof(T));
      }
    };
    QueueElement *head, tail;
    public:
    bool (*comparefunc)(uint16_t, T*);
    WaitingQueue (bool (*compareFunction)(uint16_t, T*)) :comparefunc(compareFunction), head(0), tail(0) { }
  int search(int16_t id, T *ret_data)
  {
      QueueElement *temp = head;
      QueueElement *prev = 0;
      if (temp != NULL)
      {
          if (comparefunc(id, &temp->data) == true)
          {
              if (prev)
              {
                  prev->next = temp->next;
              }
              else
              {
                 head = head->next;
              }
              memcpy(ret_data, &temp->data, sizeof(temp->data));
              delete temp;
              return OK;
          }
          prev = temp;
          temp = temp->next;
      }
      return ERROR;
  }
};
typedef struct _cmd
{
  uint8_t flags; 
  uint16_t id; 
} cmd;
bool compare(uint16_t id, cmd *cmd)
{
    return (cmd->id == id);
}
class foo
{
   WaitingQueue<cmd> queue(compare);
};

这是通常令人烦恼的解析。 编译器将WorkingQueue<cmd> queue(compare);理解为名为queue的方法的声明,该方法返回WorkingQueue<cmd>并获取不存在类型的对象compare。你可以让它明白你的意思是通过使用大括号初始化来声明一个用 compare 函数初始化的字段

WaitingQueue<cmd> queue{compare};