C/Python API で定義された構造体を C++ クラスで使用しようとしています。PyMethodDef具体的には、 andの構造体の配列を定義しようとしていますPyMemberDef(ドキュメントはこちら):
の場合PyMethodDef、クラス ヘッダーで静的配列を定義し、実装ファイルで宣言することができます。ただし、同じことをPyMemberDef行うと、次のエラーが発生します。
error: elements of array 'PyMemberDef members_ []' have incomplete type
error: storage size of 'members_' isn't known.
PyMethodDefなぜ機能するのにPyMemberDef機能しないのかがわかると思います。Python ソースでPyMethodDefは、次のように定義されています。
struct PyMethodDef {
...
...
};
typedef struct PyMethodDef PyMethodDef;
一方、PyMemberDef次のように定義されています。
typedef struct PyMemberDef {
...
...
} PyMemberDef;
PyMemberDefコード内で方法を定義し、PyMethodDefエラーなしでコンパイルされることを確認することで、これが問題の原因であることを確認しました。ただし、これを修正する方法がわかりません。ハードコーディングして自分で再定義しないことをお勧めします。これが十分に明確であることを願っています。リクエストに応じて詳細を提供できます。ありがとう。