为什么这个C ++模板会产生错误,要求丢失分号?

时间:2013-09-04 11:20:02

标签: c++ templates

我只是在Bjorn Karlsson的“Beyond the Standard Library”中输入一些解释绑定器如何工作的代码。我正在使用Visual Studio 2010 Express,并且发现缺少半冒号错误。

这一点看起来很好:

// template for a simple function object
/////////////////////////////////////////////////////////////////////////////
template<typename R, typename T, typename Arg>
  class simple_bind_t {
    typedef R (T::*fn) (Arg);  // fn defines a type - a ptr to member fn
                               // of object T, returning an R, and taking Arg

    fn _fn;                    // the function object owns a pointer to function.
    T  _t;                     // it also owns an object of type T.

  public:

    simple_bind_t(fn f, const T& t):
             _fn(fn), _t(t) {} // instantiate mber variables

    R operator()(Arg& a) 
    { 
      return (_t->_fn)(a);    // invoke the member function on t, pass a as an arg.
    }

  };

所以这一切都很好。但是当我去定义创建函数对象的实际函数时(参见下面的代码片段),我在行R的{​​{1}}下面得到一条红线。当我将鼠标滚过时,它会显示 - R (T::*fn)(Arg),)。

Error: expected a ';'

有人能找到语法错​​误的位置吗?

1 个答案:

答案 0 :(得分:4)

你在这里写了一个错字:

simple_bind_t(fn f, const T& t):
         _fn(fn), _t(t) {} // instantiate mber variables
// ----------^^

fn命名类型,您打算使用参数f。可能还有其他错误,但由于您没有发布足够完整的代码(例如,缺少placeholder的定义),因此无法找到它们。