2017-09-14 8 views
0

Je veux passer cette méthode:Comment puis-je jetai méthode de classe à QScriptEngine :: FunctionSignature

QScriptValue ScriptProcessContext::construct(QScriptContext * ctx, QScriptEngine *) 
{ 
    return this->newInstance(); 
} 

à QScriptEngine::newFunction. J'ai essayé les options suivantes:

  • Comme dans la documentation and also this example code:

    QScriptValue ctor = engine->newFunction(construct); 
    

    Erreur:

    error C3867: 'ScriptProcessContext::construct': function call missing argument list; use '&ScriptProcessContext::construct' to create a pointer to member 
    
  • Force de la distribution:

    QScriptValue ctor = engine->newFunction((QScriptEngine::FunctionSignature)construct); 
    

    Erreur:

    error C2440: 'type cast' : cannot convert from 'overloaded-function' to 'QScriptEngine::FunctionSignature' 
    
  • transtyper le pointeur à un membre

    QScriptValue ctor = engine->newFunction(
        (QScriptValue(ScriptProcessContext::*)(QScriptContext *, QScriptEngine *)) 
        &ScriptProcessContext::construct 
    ); 
    

    Erreur:

    error C2664: 'QScriptValue QScriptEngine::newFunction(QScriptEngine::FunctionSignature,int)' : cannot convert parameter 1 from 'QScriptValue (__cdecl ScriptProcessContext::*)(QScriptContext *,QScriptEngine *)' to 'QScriptEngine::FunctionSignature' 
    

Alors, comment l'écrire correctement?

+0

Avez-vous essayé de faire ce que le message d'erreur original suggérait? – nwp

+0

@nwp C'est ce que vous pouvez voir dans le dernier exemple. –

+0

Le dernier exemple montre une fonte C folle de pointeurs vers la fonction membre. Ce n'est pas du tout ce que le message d'erreur a suggéré. – nwp

Répondre

0

Vous essayez de transmettre une fonction de membre. Ce n'est pas supporté. Utilisez une fonction gratuite ou une méthode statique.

Notez que dans les deux cas, vous n'aurez pas de pointeur this. Vous devez écrire la fonction d'une manière qui n'a pas besoin d'objet.

+0

Merci, c'est ça. Juste le changer pour 'static' a résolu le problème. –