C++ 编译使用;“梅斯查克”;图书馆

C++ 编译使用;“梅斯查克”;图书馆,c++,stl,C++,Stl,我正在开发一个使用共享库的模块,而共享库又有一个链接到它的静态库。共享库构建工作正常,并生成一个.so。当我尝试在模块中使用它时,在编译阶段会出现各种各样的错误,其中大多数错误都是基于stl(具体来说是stl集合)。错误如下所示: In file included from /usr/include/c++/4.3/list:68, from /home/gayan/LHIMo/LHI/src/CalcE

我正在开发一个使用共享库的模块,而共享库又有一个链接到它的静态库。共享库构建工作正常,并生成一个.so。当我尝试在模块中使用它时,在编译阶段会出现各种各样的错误,其中大多数错误都是基于stl(具体来说是stl集合)。错误如下所示:

In file included from /usr/include/c++/4.3/list:68,                             
                 from /home/gayan/LHIMo/LHI/src/CalcEngine/include/JuncNodeInfo.h:11,                                                                           
                 from /home/gayan/LHIMo/LHI/src/CalcEngine/include/RiverFlowParameter.h:11,                                                                     
                 from Main.cpp:11:                                              
/usr/include/c++/4.3/bits/stl_list.h:465:11: error: macro "catch" requires 3 arguments, but only 1 given
这在大多数使用列表、向量或地图的地方都有给出。 请帮我解决这个问题

示例代码:库中的“CalcEngine.h”:

#ifndef LHI_CALCENGINE_H_
#define LHI_CALCENGINE_H_

extern "C"{
#include <matrix2.h>
}

class CalcEngine{

public:

protected:

};


#endif /* LHI_CALCENGINE_H_ */
\ifndef LHI\u CALCENGINE\H_
#定义LHI_CALCENGINE_H_
外部“C”{
#包括
}
类钙质发动机{
公众:
受保护的:
};
#endif/*LHI_CALCENGINE_H_*/
应用程序中的Main.cpp:

#include <iostream>
#include <CalcEngine.h>
#include <list>  // The compilation fails as soon as this is added

int main(int argc, char** argv){

    return -1;
}
#包括
#包括
#include//添加此项后,编译将立即失败
int main(int argc,字符**argv){
返回-1;
}

我觉得这与matrix2.h文件有关,但无法准确指出。文件可以找到

< p>做一些Google,看起来MeCHACH库有一个宏,称为catch(定义为Err.h,间接包含在MatRIX2.h),导致C++代码异常捕获失败。 试一试


完成后,包括meschach头并查看是否效果更好。

更多代码!我在g++中看到了非常奇怪的STL错误,因为愚蠢的语法错误,比如在类声明后缺少分号……这一点很好。我开始编写一个示例,并注意到在包含一个名为matrix2.h(来自Meschach库)的文件时出现了错误。我已经加入了密码,效果很好。还有一点需要澄清:是否每次包含使用catch的类时都必须使用#undef?是否有更好的方法(即全球未定义捕获量)?是。每次直接或间接包含err.h时,都需要取消定义catch。我建议您创建一个名为meschach.h的文件,并包含所有需要的头文件,后跟#undef catch。现在,您可以包含这个文件,而不是特定的头文件,以避免出现问题。另一种方法是看看你是否找到一个不同的库,它是写在y2k的这一边。即使它是一个C库,重新定义catch也是非常糟糕的行为。然而,这是一个宽容的情况,代码是从1993年开始的。刚刚遇到“max”的def,它与我正在使用的一些其他include文件相混淆:)。我会开始寻找替代方案。我试图联系作者,但网站上给出的地址不正确。非常感谢拉瑟兰。我不认为我能在一百万年内解决这个问题。不客气。请注意,windows.h包含对最小值和最大值的邪恶定义,因此meschach是好朋友:)
#undef catch