【问题标题】:Cross referencing, forward declarations, etc: In which order?交叉引用、前向声明等:按什么顺序?
【发布时间】:2014-08-01 12:07:58
【问题描述】:

让:

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

感谢您的帮助:)

编辑:我也尝试过在类前、后、类内声明函数指针类型,但总是有问题。

【问题讨论】:

  • 您将func_t 声明为指向(非成员)函数的指针,然后将成员变量_func 声明为指向func_t 的指针。换句话说,_func 是一个指向非成员函数指针的指针。我怀疑这就是你想要的。

标签: c++ function class forward-declaration


【解决方案1】:

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

func_t * _f;

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

func_t _f;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多