ICTCLAS2015 linux编译不通过解决办法(expected constructor, destructor or type conversion before '(' token)

下载了最新版本的ICTCLAS2015(NLPIR)
我是在centos6.5机上用codeblocks开发C++程序,导入了NLPIR.h头文件,以及加载了libNLPIR.so库,
但是始终编译不通过,报错是:
NLPIR.h:105: 错误:expected constructor, destructor or type conversion before '(' token
NLPIR.h:121: 错误:expected constructor, destructor or type conversion before '(' token
NLPIR.h:140: 错误:expected constructor, destructor or type conversion before '(' token
NLPIR.h:157: 错误:expected constructor, destructor or type conversion before '(' token
NLPIR.h:172: 错误:expected constructor, destructor or type conversion before '(' token
NLPIR.h:188: 错误:expected constructor, destructor or type conversion before '(' token

......


换了一台机器进行测试,居然编译通过,运行成功,推断是机器原因,后来查找资料,发现一哥们也遇到类似的问题,我根据他的思路将下述部分

#ifdef OS_LINUX
        #define NLPIR_API extern "C"
#else
#ifdef NLPIR_EXPORTS
#define NLPIR_API extern "C" __declspec(dllexport)
#else
#define NLPIR_API extern "C"  __declspec(dllimport)
#endif
#endif
替换为 #define NLPIR_API extern "C"

重新编译,上述错误全部消失,只剩下一个错误“expected initializer before NLPIR",然后我定位到相应位置:

#ifdef OS_LINUX
class  CNLPIR {
#else
class  __declspec(dllexport) CNLPIR{
#endif

(查google, StackOverflower)注释掉宏判断,即

//#ifdef OS_LINUX
class  CNLPIR {
//#else
//class  __declspec(dllexport) CNLPIR{
//#endif

重新编译运行,成功。


后来想一想,应该是所测试的机器未定义宏OS_LINUX,于是在NLPIR.h头文件开始处添加如下语句

#ifdef __linux
#ifndef OS_LINUX
#define OS_LINUX
#endif
#endif

并还原前面几步的操作,即可解决centos6.5上ICTCLAS2015编译不通过问题。

ps. 我在大数据论坛提交问题及解决方案(http://www.bigdatabbs.com/forum.php?mod=viewthread&tid=8425&extra=)。


你可能感兴趣的:(ICTCLAS2015 linux编译不通过解决办法(expected constructor, destructor or type conversion before '(' token))