错误:粘贴"Java_com_my_packagename_myClass_myMethod"和"("未提供有效的预处理令牌
error: pasting "Java_com_my_packagename_myClass_myMethod" and "(" does not give a valid preprocessing token
我正在编写一个宏,通过使用预处理器生成JNI方法名来简化生活
#define JNI_WRAPPER_METHOD (className, methodName, returnValue, PARAMS)
JNIEXPORT returnValue JNICALL Java_com_my_packagename_className_methodName
(JNIEnv *env, jobject obj, BOOST_PP_SEQ_ENUM(PARAMS))
所以,理想情况下是这样的:
JNI_WRAPPER_METHOD(myClass, myMethod, jint, (jint myInt)(jstring myString))
可以翻译为:
JNIEXPORT jint JNICALL Java_com_my_packagename_myClass_myMethod(JNIEnv *env, jobject obj, jint myInt, jstring myString)
但是,当我尝试使用宏时,编译器会抛出以下错误:
错误:粘贴"Java_com_my_packagename_myClass_myMethod"answers"("不会提供有效的预处理令牌
有人知道宏失败的原因吗?
您需要连接字符串,如:
Java_com_my_packagename_ ## className ## _ ## methodName
也不要在定义中留下空格:
#define JNI_WRAPPER_METHOD(className, methodName, returnValue, PARAMS)
总而言之,以下操作很好:
#define JNI_WRAPPER_METHOD(className, methodName, returnValue, PARAMS)
JNIEXPORT returnValue JNICALL
Java_com_my_packagename_ ## className ## _ ## methodName
(JNIEnv *env, jobject obj, BOOST_PP_SEQ_ENUM(PARAMS))
相关文章:
- 如何在C++中使用X509证书模在令牌中查找私钥
- holeMenuProgram.cpp:38:1 错误:'}'令牌之前的预期主表达式
- 错误:无效的预处理指令 #i 的意思是 #if?
- C++:"("令牌"之前有预期的非限定 id 指向类中成员函数的指针
- Arduino 用于语句错误。令牌之前的预期')' ';'。如何解决这个问题?
- 宏定义中的预处理器令牌两边有两个双引号
- 是否可以在多行字符串文本中使用 C/C++ 预处理器令牌
- 错误:粘贴"tmp_UINT"和"+"未提供有效的预处理令牌
- 如何将字符串作为预处理器令牌传递
- 插入protobuf时SQLite无法识别的令牌错误:要处理哪些令牌以及如何处理?
- 关于C宏的错误预处理令牌无效
- 粘贴形成了无效的处理令牌"."
- C++预处理器能否判断令牌是否为字符串
- 错误:粘贴"Java_com_my_packagename_myClass_myMethod"和"("未提供有效的预处理令牌
- 用于命名空间限定的c++预处理器令牌粘贴
- 为什么qi::skip处理来自词法分析器的令牌时会失败?
- 如何根据预定义的宏(C++预处理器)组成有效的令牌
- Bison/Flex以相反的顺序处理令牌
- 正在确定预处理器令牌的值
- 令牌化时强制预处理器评估