交叉引用、前向声明等:按啥顺序?
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;
【讨论】:
以上是关于交叉引用、前向声明等:按啥顺序?的主要内容,如果未能解决你的问题,请参考以下文章