2012-04-24 8 views
9

SWIGによるこれらの警告と回避方法を教えてください。SWIGの警告503とは何ですか?

Warning 503: Can't wrap 'operator()' unless renamed to a valid identifier. 
Warning 503: Can't wrap 'operator =' unless renamed to a valid identifier. 
Warning 503: Can't wrap 'operator *' unless renamed to a valid identifier. 

SWIGで生成されたC++コードがAndroid NDKでコンパイルされると、警告が生成されます。

+8

これはG ++の警告ではなく、SWIGの警告です。 – Flexo

+1

私はそれがSWIGのように見えると言うつもりだった。 Javaからそれらの演算子を使いたい場合を除き、問題はありません。 –

+0

情報をいただきありがとうございます、私は私の質問を編集しました。 – arsalank2

答えて

13

Javaには、C++と同じ意味でoperator()またはoperator=に相当するものはないため、SWIGが直接ラップする方法はありません。彼らが重要かもしれないので、彼らはラップされていないことを説明する警告が表示されます。 (operator=が見つからない場合があります)。

このコードの展示swig -Wall -c++ -javaを実行している、このような警告が表示さ:

%module Sample 

struct test { 
    bool operator()(); 
}; 

しかし、あなたのような何かを言うことによって警告を沈黙し、通常のメンバ関数として直接オペレータが露出するようにSWIGを伝えることができます。

%module Sample 

%rename(something_else) operator(); 

struct test { 
    bool operator()(); 
}; 

生成されたラッパーにoperator()の代わりにsomething_elseという関数が追加されます。

それとも、それらを無視して使用するだけで結構であることをSWIGする主張することができます

%ignore operator() 

を(あなたはまた、クラス名と演算子を修飾することにより、少ない広くこれらのディレクティブのいずれかを適用することができます)。

3

ターゲット言語で使用する場合は、SWIGで特別な方法でオーバーロードされた演算子を処理する必要があります。 hereを参照してください。

関連する問題