【问题标题】:class template evaluating to a function评估为函数的类模板
【发布时间】:2012-01-24 16:16:34
【问题描述】:

我有以下代码:

typedef Coord2d<double> dCoord;
typedef std::pair<dCoord, Color<double> > cdpair;
CircularBuffer<cdpair>  _path;

dCoord head()
{
  return _path.front().first(); // error here
}

dCoord 是一个类,但我收到以下错误:

错误 C2064:术语不计算为采用 0 个参数的函数

即使我没有返回值,我也会遇到同样的错误。为什么我会收到此错误,我该如何解决?

P.S.
front() 返回 myPair 类型的项目。

【问题讨论】:

  • 我不知道 CircularBuffer 类。它有一个名为front的成员函数吗?这个函数返回什么?你应该改进你的代码示例。

标签: c++ templates typedef


【解决方案1】:

first 是成员,而不是函数:

return _path.front().first;

【讨论】:

    【解决方案2】:

    因为std::pair 上的first 是一个成员变量,在您的情况下是dCoord,正如错误所说,它不会评估为采用0 个参数的函数。

    tl;dr:std::pair::first 是一个变量,而不是一个函数。

    【讨论】:

      【解决方案3】:

      最可能的答案是firststd::pairfirst 成员。它是dCoord 类型的公共数据成员,不是函数,因此不能作为函数调用。

      试试:

      return _path.front().first;
      

      【讨论】:

        【解决方案4】:

        firstsecondstd::pair 的数据成员,而不是成员函数。试试这个:

        dCoord head()
        {
            return _path.front().first;
        }
        

        【讨论】: