私は現在、C++ クラスとそのメソッド (最終的には複数のメソッドですが、今のところ 1 つが機能していません) を javascript にバインドしようとしています。現在、明確にするために、すべての C++ バインディングを処理するために個別の interface.cpp ファイルを使用しています。これがファイルの外観です。
#include <emscripten/bind.h>
#include "board.h"
using namespace emscripten;
EMSCRIPTEN_BINDINGS(my_module){
class_<Board>("Board")
.constructor()
.function("MakeMove", &Board::MakeMove);
}
board.h は、Board クラスと関連するメソッドを含むヘッダー ファイルです。このコマンドでプロジェクトをコンパイルしようとしています:
emcc --bind src/* -I include -I ../emsk/emsdk/upstream/include/
src/* にはすべての .cpp ソース ファイルが含まれ、include/ にはすべてのヘッダー ファイルが含まれます。実行すると、次のエラーが表示されます。
emcc --bind src/* -I include -I ../emsk/emsdk/upstream/include/
src/interface.cpp:8:10: error: no matching member function for call to 'function'
.function("MakeMove", &Board::MakeMove);
~^~~~~~~~
/home/sethbassetti/emsk/emsdk/upstream/emscripten/cache/sysroot/include/emscripten/bind.h:1567:44: note: candidate template ignored: couldn't infer template argument 'Callable'
EMSCRIPTEN_ALWAYS_INLINE const class_& function(const char* methodName, Callable callable, Policies...) const {
^
1 error generated.
emcc: error: '/home/sethbassetti/emsk/emsdk/upstream/bin/clang++ -target wasm32-unknown-emscripten -DEMSCRIPTEN -fignore-exceptions -fvisibility=default -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr -D__EMSCRIPTEN_major__=3 -D__EMSCRIPTEN_minor__=1 -D__EMSCRIPTEN_tiny__=1 -D_LIBCPP_ABI_VERSION=2 -Werror=implicit-function-declaration -Xclang -iwithsysroot/include/SDL --sysroot=/home/sethbassetti/emsk/emsdk/upstream/emscripten/cache/sysroot -Xclang -iwithsysroot/include/compat -Iinclude -I../emsk/emsdk/upstream/include/ src/interface.cpp -c -o /tmp/emscripten_temp_gfg6j40o/interface_2.o' failed (returned 1)
C++クラスをjavascriptにリンクするためにembindのドキュメントをほぼ正確にフォローしているため、問題が何であるかはわかりません。私はこれのさまざまなバージョンを試してみましたが、このクラスとメソッドのバインディングを実行できるものはないようです。どんな助けでも大歓迎です!