2016-07-16 10 views
2

私はcythonを使ってC++ライブラリをラップしようとしています。 C++ヘッダファイルがMYFILE.Hは、このようなクラスを宣言して言う:cythonでcppクラスのenumを宣言するにはどうすればいいですか

cdef extern from "<MyFile.h>": 

    cdef cppclass MyClass: 

     cdef enum MyEnum: 
      TYPE0 = 0 
      TYPE1 = 1 
      TYPE2 = 2 

     MyClass(MyEnum val=TYPE0) except + 

しかしcythonそれをコンパイルしません:

class MyClass { 

public: 
    enum MyEnum{ 
     TYPE0 = 0, 
     TYPE1 = 1, 
     TYPE2 = 2, 
    }; 

    MyClass(MyEnum val=TYPE0){ 
     // ... 
    } 
    // ... 
} 

PXDファイルには、これは持っています。これはどうすればいいですか?

+1

あなたは私たちのコンパイラエラーを示すことによって開始することができます。 –

+0

エラーは次のとおりです:module.pxd:6:8:識別子が必要で、 'cdef'が見つかりました。Cythonファイルをコンパイル中にエラーが発生しました: – user3431010

答えて

2

は、名前空間を使用してみてください:

cdef extern from "MyFile.h" namespace "MyClass": 
    cdef enum MyEnum: 
     TYPE0 = 0 
     TYPE1 = 1 
     TYPE2 = 2 

それとも、これは同様に動作します:

cdef extern from "MyFile.h": 
    cdef enum MyEnum "MyClass::MyEnum": 
     TYPE0 = 0 
     ... 
+1

これは間違いありません。 PythonでこれをMyClass :: MyEnumではなくMyEnumとしてアクセスすることを追加する価値はあります – DavidW

+0

ありがとう、私はそれを試してみました。 – user3431010

関連する問題