void abort()声明会抛出不同的异常

时间:2011-11-14 13:43:43

标签: c++ abort throw festival

我正在尝试为C++编写一些Festival代码(使用C ++ API),并且在尝试编译时遇到困难。以下是我调用g++的方法:

g++ -Wall -pedantic -I../ -I../speech_tools/include/ helloFestival.C -o h -L../festival/src/lib/libFestival.a -L../speech_tools/lib/libestools.a -L../speech_tools/lib/libestbase.a -L../speech_tools/lib/libeststrings.a |& tee festival.runLog 我得到的错误是:

In file included from ../speech_tools/include/EST.h:48,
                 from ../festival/src/include/festival.h:47,
                 from helloFestival.C:4:
../speech_tools/include/EST_String.h:50: error: declaration of ‘void abort()’ throws different exceptions
/usr/include/stdlib.h:513: error: from previous declaration ‘void abort() throw ()’

EST_String.h中的违规行将是:
extern "C" void abort(void);

我使用的main()函数可以在这里找到:festvox.org/docs/manual-1.4.3/festival_28.html#SEC133

这里给出的编译和链接说明是我使用过的。

我在网上看到了这个问题,一些解决方案表明它可能是因为向后兼容,或者在析构函数中调用abort()等等。我的问题是:

  1. 我该如何摆脱这个?
  2. 为什么我会看到此错误?

4 个答案:

答案 0 :(得分:1)

您会看到此错误,因为speech_tools中的abort()函数与标准强制的abort()函数冲突。可能没有什么好的,干净的方法来解决这个问题。如果您自己编写了EST_String.h,请以不同的方式命名函数。

如果没有,请不要在同一文件中包含stdlib.h和EST_String.h。是的,这是限制和不好的,但你在这里处于糟糕的境地。

答案 1 :(得分:0)

这是一个非常基本的错误。中止的两个定义是冲突的我会尝试删除EST_String.h中的行,并可能添加#include <stdlib.h>并查看它是否在此之后编译。

答案 2 :(得分:0)

我不认为包括stdlib头是问题所在。但是,您可以通过 <cstdlib> <stdlib.h>作为翻译单元中的第一个标题来获得更好的里程

基本原理:以防<cstdlib>中的定义添加no-throw declspec。

所以我真的建议......只是摆弄它。如果它不能正常工作(确保你没有冲突的包含或陈旧的预编译头文件),我建议只删除EST_String.h中有问题的声明

答案 3 :(得分:0)

今天这仍然是一个问题。作为一种解决方法,我正在使用这段代码。 这很丑陋,但是让它发挥作用:

extern "C" void abort_est() { abort(); }
#define abort abort_est
#include <festival.h>
#undef abort