交叉引用、前向声明等:按啥顺序?

Posted

技术标签:

【中文标题】交叉引用、前向声明等:按啥顺序?【英文标题】: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 是一个指向非成员函数指针的指针。我怀疑这就是你想要的。 【参考方案1】:

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

func_t * _f;

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

func_t _f;

【讨论】:

以上是关于交叉引用、前向声明等:按啥顺序?的主要内容,如果未能解决你的问题,请参考以下文章

BMP文件中图像数据是按啥顺序存放的?

父子组件按啥顺序呈现?

Nginx:限速和缓存按啥顺序执行?

SVG 点按啥顺序绘制?

pytest 固定装置按啥顺序执行?

我不明白函数 foo 和 bar 将按啥顺序执行? [复制]