2017-09-14 46 views
0

我想這個方法傳遞:我怎麼投類方法來複制代碼QScriptEngine :: FunctionSignature

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

QScriptEngine::newFunction。我嘗試了以下選項:

  • 如文檔and also this example code

    QScriptValue ctor = engine->newFunction(construct); 
    

    錯誤:

    error C3867: 'ScriptProcessContext::construct': function call missing argument list; use '&ScriptProcessContext::construct' to create a pointer to member 
    
  • 部隊投:

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

    錯誤:

    error C2440: 'type cast' : cannot convert from 'overloaded-function' to 'QScriptEngine::FunctionSignature' 
    
  • 演員指針成員

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

    錯誤:

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

因此,如何正確地寫呢?

+0

你有沒有嘗試做什麼原始的錯誤消息建議? – nwp

+0

@nwp這就是你可以在最後一個例子中看到的 –

+0

最後一個例子顯示了對成員函數指針的瘋狂C轉換。這完全不是這個錯誤消息的建議。 – nwp

回答

0

您嘗試傳遞成員函數。這不被支持。使用免費功能或靜態方法。

請注意,在這兩種情況下,您都不會有this指針。您需要以不需要對象的方式編寫函數。

+0

謝謝,就是這樣。只要將其改爲「靜態」即可解決問題。 –