Перекрестные ссылки, предварительные декларации и т. Д. В каком порядке?
Позволять:
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 ответ
Решение
Заказ выглядит хорошо. Что не выглядит нормально
func_t * _f;
Вы объявляете указатель на указатель на член, а затем пытаетесь использовать его в качестве указателя на член. Вместо этого используйте обычный указатель на член:
func_t _f;