【发布时间】:2016-09-26 07:00:39
【问题描述】:
我正在将旧代码从 gcc 迁移到 clang。代码中存在很多类型转换问题,即对 void 指针的算术运算、const char* 到 char* 的转换、unsigned char* 到 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 中禁用此类错误?
【问题讨论】:
-
出错是有原因的,最好的办法是修复它们。
标签: c++ c++11 compiler-errors type-conversion clang++