交叉引用,前向声明等:以哪种顺序?

时间:2014-08-01 12:07:58

标签: c++ function class forward-declaration

让:

class A
{
    typedef A (* func_t)( A a );

    func_t * _func;
};

我必须以什么顺序写这个,以及我需要什么前瞻声明(如果有的话),以便编译?

如果需要,这是我的真实代码:

class Value
{
public:

   typedef Value (* func_t)( const std::vector< Value > & args );

private:

   union
   {
      /// ...

      func_t * _f;
   }
   _data;

   // ...
};

Value Value::operator () ( const std::vector< Value > & args ) const
{
   if( this->isFunction() )
   {
      return this->_data._f( args ); // ERROR
   }
   else
   {
      throw exception( "Value::operator () - Not an E_FUNCTION." );
   }
}

这给了我错误:

error C2064: term does not evaluate to a function taking 1 arguments

感谢您的帮助:)

编辑:我也尝试在类之前,之后和之内声明函数指针类型,但始终存在问题。

1 个答案:

答案 0 :(得分:4)

订单看起来不错。看起来不错的是

func_t * _f;

您正在声明指向成员的指针,然后尝试将其用作指向成员的指针。使用指向成员的普通指针:

func_t _f;