错误:未定义引用'_jstring * QAndroidJniObject :: callStaticMethod< _jstring *>(char const *,char const *)'

时间:2014-12-06 11:48:28

标签: android c++ qt linker-errors qtandroidextras

我正在尝试使用QAndroidJniObject。作为测试,我只调用2个Java函数,一个返回一个int,另一个返回一个字符串。

返回int时,此代码编译正常:

jint a = QAndroidJniObject::callStaticMethod<jint>("HelloJava", "getInt");

但是,如果我将其更改为调用返回字符串的函数,则会失败:

jstring b = QAndroidJniObject::callStaticMethod<jstring>("HelloJava", "getString");

失败了

  

错误:未定义引用'_jstring *   QAndroidJniObject :: callStaticMethod&lt; _jstring *&gt;(char const *,char   常量*)'

由于QAndroidJniObject::callStaticMethod是一个模板函数,如何为一种类型定义但是为另一种类型定义?

修改:实际上,我刚刚使用jobjectjbyteArrayjbooleanArrayjbytejboolean等进行了测试。这就是我发现的 - 只有jshortjintjlongjboolean等整数类型才有效,而字符串,数组和对象都有undefined reference。 1}}错误。

2 个答案:

答案 0 :(得分:5)

正如您在following table中看到的,整数类型是原始的,而其余的是对象类型。因此,我建议您尝试使用:

jstring b = QAndroidJniObject::callStaticObjectMethod<jstring>("HelloJava", "getString")

这不是一个错误,而是一个功能。请参阅官方立场this issue tracker entry

QAndroidJniObject/jstring : no reference

答案 1 :(得分:3)

试试这个:

 QAndroidJniObject jb = QAndroidJniObject::callStaticObjectMethod("HelloJava", "getString", "()Ljava/lang/String;");
 QString b = jb.toString();