Android ndk build猜测错误;模板";C++;。它';这只是C中的变量名

Android ndk build猜测错误;模板";C++;。它';这只是C中的变量名,android,android-ndk,Android,Android Ndk,当我进行ndk构建时,会出现如下错误: /Users/../handle.c:80: error: 'struct _AR2Tracking2DParamT' has no member named 'template' /Users/../handle.c:100: error: 'struct _AR2Tracking2DParamT' has no member named 'template' 我不知道“模板”,所以在谷歌上搜索了一下。最后,我知道它是C++的限定符。 但是handle

当我进行ndk构建时,会出现如下错误:

/Users/../handle.c:80: error: 'struct _AR2Tracking2DParamT' has no member named 'template'
/Users/../handle.c:100: error: 'struct _AR2Tracking2DParamT' has no member named 'template'
我不知道“模板”,所以在谷歌上搜索了一下。最后,我知道它是C++的限定符。 但是handle.c是一个c文件。NDK为什么错误地猜测它是C++文件?< /P> 有没有办法在Android.mk中指定它是一个C文件

谢谢


2013/11/22编辑:

对不起,我输入了另一个错误代码。相关错误代码如下所示:

--模板.h--

--ndk build说--

K NDK构建错误的猜测模板h是C++头文件。 如果它理解它是一个C头文件,那么它应该将
模板
分析为一个变量,而不是一个关键字


2013/11/25编辑:

这里是template.h。 我将“模板”替换为“临时”。所以我暂时解决了这个问题

#ifndef AR2_TEMPLATE_H
#define AR2_TEMPLATE_H
#include <AR/ar.h>
#include <AR2/config.h>
#include <AR2/imageSet.h>
#include <AR2/featureSet.h>

#ifdef __cplusplus
extern "C" {
#endif

(An omission)

AR2TemplateT  *ar2GenTemplate ( int ts1, int ts2 );
int            ar2FreeTemplate( AR2TemplateT  *temp  );

int ar2SetTemplateSub ( ARParamLT *cparamLT, float  trans[3][4], AR2ImageSetT *imageSet,
                        AR2FeaturePointsT *featurePoints, int num,
                        AR2TemplateT *temp );

int ar2GetBestMatching ( ARUint8 *img, ARUint8 *mfImage, int xsize, int ysize, int pixFormat,
                         AR2TemplateT *mtemp, int rx, int ry,
                         int search[3][2], int *bx, int *by, float *val);
int ar2GetBestMatching2(void);

int ar2GetResolution( ARParamLT *cparamLT, float  trans[3][4], float  pos[2], float  dpi[2] );
int ar2GetResolution2( ARParam *cparam, float  trans[3][4], float  pos[2], float  dpi[2] );

int ar2SelectTemplate( AR2TemplateCandidateT *candidate, AR2TemplateCandidateT *prevFeature, int num,
                       float  pos[4][2], int xsize, int ysize );



#ifdef __cplusplus
}
#endif
#endif
\ifndef AR2\u模板
#定义AR2_模板
#包括
#包括
#包括
#包括
#ifdef_uucplusplus
外部“C”{
#恩迪夫
(遗漏)
AR2模板*AR2模板(int ts1、int ts2);
int ar2freemplate(ar2template*temp);
int ar2SetTemplateSub(ARParamLT*cparamLT,float trans[3][4],ar2imageset*imageSet,
AR2FeaturePointsT*特征点,整数,
AR2模板*温度);
int ar2GetBestMatching(ARUint8*img、ARUint8*mfImage、int-xsize、int-ysize、int-pixFormat、,
AR2模板*mtemp,内部接收,内部接收,
int search[3][2],int*bx,int*by,float*val);
int AR2GetBestMatching 2(无效);
int ar2GetResolution(ARParamLT*cparamLT,浮点trans[3][4],浮点pos[2],浮点dpi[2]);
int ar2GetResolution2(ARParam*cparam,浮点trans[3][4],浮点pos[2],浮点dpi[2]);
int ar2SelectTemplate(AR2TemplateCandidateT*candidate,AR2TemplateCandidateT*prevFeature,int num,
浮动位置[4][2],int-xsize,int-ysize);
#ifdef_uucplusplus
}
#恩迪夫
#恩迪夫

<代码> > p>不幸的是,<代码>模板<代码>是C++中的一个。因此,C++ C++中即使在包含C++的H文件中,也不能将此作为标识符使用,即使您将其封装为<代码> Excel“C”<代码>,作为

extern "C" {
    #include "template.h"
}
最好的解决方案是更改
template.h
中参数的名称。如果文件是用石头雕刻的,这里有一个解决方法:

extern "C" {
    #define template notemplate
    #include "template.h"
    #undef template
}
extern "C" {
    #include "template.h"
}
extern "C" {
    #define template notemplate
    #include "template.h"
    #undef template
}