在Android下
  定义模板函数、运算符重载、静态变量 和 形参默认值   
与在c/c++中定义的区别在哪里?为什么?   在linux下能编译运行的一段代码    拿到android上,make下就报错了..........

解决方案 »

  1.   

    不知道 现在应用层都没搞定 搞定应用层了 在研究ndk去  
      

  2.   

    在linux下能编译运行的一段代码    拿到android上,make下就报错了..........                                  你这样问,肯定难倒大家了。。详细点吧。
      

  3.   


    #include <stdio.h>template <class T>
    void print_size(T t,int a=6)
    {
    printf("t = %d\t a = %d\n",sizeof(T),a);
    }typedef struct myint{
    int a;
    int b;
    }mint;int  operator==(mint a,mint b)
    {
    if( a.a == b.a && a.b == b.b )
    return 1;
    return 0;
    }int main()
    {
    mint m,n;
    char s1[10] = "movie";
    char s2[10] = "hello";
    m.a = n.a = 4;
    m.b = n.b = 7; print_size(5);
    print_size('c',5); if(m==n) print_size(m);
    return 0 ;
    }
      

  4.   

    那个问题貌似解决了,原来是因为我的文件名是.c的,Android默认用gcc编译,所以就报错了汗~~~~~~~~~~~~
    我又有另外个问题,
    就是编译生成的.o文件,想生成库文件,报错如下
    target SharedLib: libos (out/target/product/generic/obj/SHARED_LIBRARIES/libos_intermediates/LINKED/libos.so)
    prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/../lib/gcc/arm-eabi/4.4.3/../../../../arm-eabi/bin/ld: out/target/product/generic/obj/SHARED_LIBRARIES/libos_intermediates/src/thread.o: in function bridge(thread*, thread_type_e):external/vgx/libos/src/thread.cpp:25: error: undefined reference to 'create_posix_thread(char const*, unsigned long, unsigned long, void* (*)(void*), void*, unsigned long)'
    这个函数我明明已经包含在头文件中了。
    各位大大帮忙指点下....
      

  5.   

    如果是.c文件,用下面的方法解决:
    #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++特性,就会报这个错误。