在clang中关闭类型转换

时间:2016-09-26 07:00:40

标签: c++ c++11 compiler-errors type-conversion clang++

我正在将遗留代码从gcc迁移到clang。代码中存在很多类型转换问题,即对void指针的算术运算,const char * to char *转换,unsigned char * to char *转换,将父类对象分配给子类。由于代码库非常大,因此对所有内容进行类型转换将是非常麻烦的任务。 是否有任何(或一组)标志用于关闭这些错误?我尝试过-fpermissive或-Wno-error-(错误类型)。

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是jobject类型,GetStringUTFChars在jni.h中声明为const char* GetStringUTFChars(jstring string, jboolean* isCopy) 和_jstring声明为

class _jstring : public _jobject {}

因此我们尝试将基类对象分配给被视为错误的子类。 考虑到代码库的大小,不可能对所有事件进行类型转换。

是否有任何标志我可以在clag中禁用此类错误?

1 个答案:

答案 0 :(得分:1)

你能做的最好的事情是clang++ --std=c++98 -fpermissive