不能从'const jchar *'转换为'const wchar_t *' [英] cannot convert from 'const jchar *' to 'const wchar_t *'
本文介绍了不能从'const jchar *'转换为'const wchar_t *'的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
这是从.cpp文件抛出的错误。我使用visual studio 10和windows7 32位和从eclipse indigo编译
AUWideString(JNIEnv * jni,jstring jstr)
:mJni(jni),
mJString(jstr),
mString(0)
{
if (jstr!= 0){
mString = jni-> GetStringChars(jstr,0);
}
}
〜AUWideString()
{
mJni-> ReleaseStringChars(mJString,mString);
}
操作符const wchar_t *()const
{
return mString;
}
**错误C2440:'=':无法从'const jchar *'转换为'const wchar_t *'
指向的类型是不相关的;转换需要reinterpret_cast,C风格的转换或函数式转换
错误C2664:'JNIEnv _ :: ReleaseStringChars':无法将参数2从'const wchar_t *'转换为'const jchar *'**** $ b $ c>无符号短 c>,而不是 wchar_t code>。但是,在Windows上,两者都是16位大小,所以你可以在需要时使用类型转换,如第一个编译器错误所说。您还应将 mString
定义为 jchar *
,而不是 wchar_t *
因为这是JNI实际工作。 class AUWideString
{
private:
JNIEnv * mJni;
jstring mJString;
jchar * mString;
...
public:
AUWideString(JNIEnv * jni,jstring jstr)
:mJni(jni),
mJString(jstr),
mString(0)
{
if(mJString!= 0)
mString = mJni-> GetStringChars(mJString,0);
}
〜AUWideString()
{
if((mJString!= 0)&(mString!= 0))
mJni - > ReleaseStringChars(mJString,mString);
}
operator const wchar_t *()const
{
return reinterpret_cast< const wchar_t *>(mString);
}
};
This is an error getting thrown from .cpp file.I am using visual studio 10 and windows7 32 bit and am compiling from eclipse indigo
AUWideString(JNIEnv* jni, jstring jstr)
: mJni(jni),
mJString(jstr),
mString(0)
{
if (jstr != 0) {
mString = jni->GetStringChars(jstr, 0);
}
}
~AUWideString()
{
mJni->ReleaseStringChars(mJString, mString);
}
operator const wchar_t*() const
{
return mString;
}
**error C2440: '=' : cannot convert from 'const jchar *' to 'const wchar_t *'
Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
error C2664: 'JNIEnv_::ReleaseStringChars' : cannot convert parameter 2 from 'const wchar_t *' to 'const jchar *'****
how should this be resolved?
解决方案 jchar
is defined as unsigned short
, not wchar_t
. However, on Windows, both are 16-bit in size, so you can use a type-cast when needed, as the first compiler error says. You should also be defining mString
as a jchar*
instead of a wchar_t*
since that is what JNI actually works with. That would eliminate the second error message.
Try this:
class AUWideString
{
private:
JNIEnv* mJni;
jstring mJString;
jchar* mString;
...
public:
AUWideString(JNIEnv* jni, jstring jstr)
: mJni(jni),
mJString(jstr),
mString(0)
{
if (mJString != 0)
mString = mJni->GetStringChars(mJString, 0);
}
~AUWideString()
{
if ((mJString != 0) && (mString != 0))
mJni->ReleaseStringChars(mJString, mString);
}
operator const wchar_t*() const
{
return reinterpret_cast<const wchar_t*>(mString);
}
};
这篇关于不能从'const jchar *'转换为'const wchar_t *'的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文