2016-09-26 8 views
-2

gccからclangにレガシーコードを移行しています。コードには、voidポインター、const char *からchar *への変換、unsigned char *からchar *への変換、子クラスへの親クラスオブジェクトの割り当てなど、型変換の問題が多々あります。コードベースは非常に大きいので、すべてを型キャストするのは非常に面倒な作業になります。 これらのエラーをオフにするために使用するフラグがありますか?私は試してみました - または - エラー - (エラータイプ)。タイプ変換を無効にする

char* Page::pageTitle() 
{ 

    jvalue pageObject; 

    m_javaClass.CallMethod(
     m_javaObject.Get(), 
     "getPageTitle", 
     "()Ljava/lang/String;", 
     'L', 
     (jvalue*)0, 
     &pageObject); 

    if (pageObject.l == NULL) 
     return NULL; 

    JNIEnv* env = JNIGetEnv(); 
    jboolean isCopy = JNI_TRUE; 

    const char* pageString = env->GetStringUTFChars(pageObject.l, &isCopy); 

    return pageString; 
} 

error: cannot initialise a parameter of type 'jstring' (aka '_jstring *') with an lvalue of type 'jobject' (aka '_jobject *') 

jvalue.lはjオブジェクトタイプとGetStringUTFCharsがjni.h中 にconst char* GetStringUTFChars(jstring string, jboolean* isCopy)として宣言されており、私たちはある子クラスに基底クラスのオブジェクトを割り当てるしようとしているので

class _jstring : public _jobject {} 

として_jstringが宣言されていますエラーとして扱われます。 コードベースのサイズを考慮すると、すべての出現を型キャストできません。

このような種類のエラーをクローラで無効にできるフラグはありますか。

+0

[mcve]を作成します。 – user2079303

+2

エラーが発生する理由がありますが、これを修正するのが最善の方法です。 –

答えて

1

あなたができることは、clang++ --std=c++98 -fpermissiveです。

+1

gcc -fpermissiveでコンパイルしている間は警告にエラーが表示されますが、clang ++では動作しません。私はclang ++と同じエラーが発生しています。 –

関連する問題