android — ошибка: неопределенная ссылка на ‘_jstring * QAndroidJniObject :: callStaticMethod & lt; _jstring * & gt; (char const *, char const *)’

Я пытаюсь использовать QAndroidJniObject, В качестве теста я просто вызываю 2 функции Java, одна возвращает int, а другая — строку.

При возврате int этот код прекрасно компилируется:

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

Но если я изменю это на вызов функции, возвращающей строку, это не удастся:

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

Это не с

ошибка: неопределенная ссылка на _jstring *
QAndroidJniObject :: callStaticMethod<_jstring *> (char const *, char
сопз *)»

поскольку QAndroidJniObject::callStaticMethod такое функция шаблона, как она может быть определена для одного типа, но не определена для другого?

Редактировать: На самом деле, я только что проверил с jobject, jbyteArray, jbooleanArray, jbyte, jbooleanи т. д. Это то, что я нашел — только целочисленные типы чисел, такие как jshort, jint, jlong, jboolean работать, в то время как строки, массивы и объекты все дают undefined reference ошибка.

2

Решение

Как вы можете видеть в следующая таблица, целочисленные типы являются примитивными, тогда как остальные являются объектными типами. Поэтому я предлагаю вам попробовать вместо этого:

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

Это не ошибка, а особенность. Увидеть запись этого трекера на официальной позиции:

QAndroidJniObject / jstring: нет ссылки

3

Другие решения

попробуй это:

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

По вопросам рекламы [email protected]