运算符重载
boolean_t operator==(thread_t& thd_a, thread_t& thd_b)
{
return (&thd_a == &thd_b);
}
error: expected '=', ',', ';', 'asm' or '__attribute__' before '==' token函数模板
error: expected '=', ',', ';', 'asm' or '__attribute__' before '<' token
template<class TYPE>
static inline void list_free(list_t* plst);代码明明没问题啊,这是怎么了?

解决方案 »

  1.   

    这些代码我单独拿出来在linux编译运行没问题,但是拿到android里面就出问题了
      

  2.   

         会否是编译工具的问题,我之前做个一些其他的方案(非android),编译工具链是公司做好的。
         当时也编过什么传地址的函数(正儿八经的C语言,不会是语法错误,但是编译器总是报错)。你试下把型参用(thread_t* thd_a, thread_t* thd_b)试一试
      

  3.   

    error: expected '=', ',', ';', 'asm' or '__attribute__' before '==' token
    这个错误不知道是不是和arm编译器与关系
      

  4.   

         我也是菜鸟,这种情况就真不知道了,既然Linux上可以编译,那只有一步一步测试了。
         要不就是编译器的问题;要不就是库与标准的C/C++不太一样。
    ——换个重载符号  或者  不做事直接return 0 或者 不带参数。  看到底是那个地方编不过。
         弱弱问下,看你写的这样,是在内核里、还是抽象层?本来想试一试,但我还不知道这段代码的上下文,该加到哪里去编呢?
         
      

  5.   

    非常感谢你的回答算是JNI和内核之间的c++库层吧 在android/external下
      

  6.   

    我换个问法:
    在Android下 定义模板函数、运算符重载 和 形参默认值  
    与在c/c++中定义的区别在哪里?为什么?
      

  7.   

    #ifdef __cplusplus
    extern "C" {
    #include <utils/CallStack.h>
    }
    #endif类似这样就好了参考:
    问题
    编译NDK程序,提示错误“expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘<’ token“解决
    目前的经历来看,是编译C程序中有C++特性时会出现该错误。
    原因清楚,解决就很简单,要么去掉C++特性,要么把扩展名改为CPP还有一种情况要注意,就是obj目录下的以前编译的中间结果要删除干净,否则会造成误判,比如
    1、做了一个A.c,编译通过
    2、对A.c复制粘贴改名做出一个A.cpp
    3、在A.cpp的头文件里加了一个类,再去编译,就会出现这个expected的错误。
    原因不是很清楚,猜测是因为obj没清理,实际上build系统还是去编译A.c,因为A.c和A.cpp实际上用的是一个头文件(这个头文件里已经定义了一个类),此时build系统会发现这个C程序里有C++特性,就会报这个错误。