Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/136.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
void abort()的声明引发不同的异常 我试图编写一些代码> C++ >代码>(使用C++ API),用于节日>代码>,在编译时卡住了。下面是我如何调用g++:_C++_Abort_Throw_Festival - Fatal编程技术网

void abort()的声明引发不同的异常 我试图编写一些代码> C++ >代码>(使用C++ API),用于节日>代码>,在编译时卡住了。下面是我如何调用g++:

void abort()的声明引发不同的异常 我试图编写一些代码> C++ >代码>(使用C++ API),用于节日>代码>,在编译时卡住了。下面是我如何调用g++:,c++,abort,throw,festival,C++,Abort,Throw,Festival,g++-Wall-pedantic-I../-I../speech\u tools/include/helloFestival.C-o h-L../festival/src/lib/libFestival.a-L../speech\u tools/lib/libestools.a-L../libestbase.a-L../speech\u tools/lib/libeststrings.a|&tee festival.runLog 我得到的错误是: In file included from .

g++-Wall-pedantic-I../-I../speech\u tools/include/helloFestival.C-o h-L../festival/src/lib/libFestival.a-L../speech\u tools/lib/libestools.a-L../libestbase.a-L../speech\u 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)

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

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

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

  • 我怎样才能摆脱这个
  • 为什么我会看到这个错误
    这是一个非常基本的c错误。中止的两个定义相互冲突。我将尝试删除
    EST_String.h
    中的行,并可能添加一个
    #include
    ,然后查看它是否编译。

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


    如果没有,请不要将stdlib.h和EST_String.h包含在同一文件中。是的,这是限制性的,而且很糟糕,但是您现在的处境很糟糕。

    我认为包括stdlib头不是问题所在。但是,如果将
    作为翻译单位的第一个标题,您可能会获得更好的里程数

    理由:以防万一,
    中的定义添加了无抛出declspec


    所以我真的建议。。。随便摆弄吧。如果这两种方法都不起作用(确保没有冲突的include或过时的预编译头),我建议只删除EST_String.h中有问题的declarion,这在今天仍然是个问题。作为解决方法,我使用这段代码。 它又丑又黑,但能正常工作:

    extern "C" void abort_est() { abort(); }
    #define abort abort_est
    #include <festival.h>
    #undef abort
    
    extern“C”void abort_est(){abort();}
    #定义中止中止
    #包括
    #取消终止
    
    你能举一个简单的例子吗?这很好,而且是第22条军规。我想你可以让它
    extern“C”void abort(void)throw()?这将是一个有趣的悖论,因为C不知道exceptions@VJo:这里可以看到我使用的示例:-函数
    main()
    与页面上的函数相同。链接和编译说明也可以在上面找到。@sehe:这就是我在看到一些帖子后所做的尝试,这些帖子说,
    abort()
    的原始定义会抛出,而这不会。。这也不起作用,我以对
    errors.nope的
    未定义引用结束。在
    EST_String.h
    中注释该行并包括
    stdlib.h
    删除了该行,但引入了大量其他
    未定义的
    错误引用
    EST_String.h
    是节日发行版附带的文件。你在说什么?什么是语音工具?头文件“./speech\u tools/include/EST\u String.h”。@thiton:EST\u String.h随发行版提供。它是节日的C++ API的一部分。另外,默认情况下,
    stdlib.h
    不包含在上述文件中。您能否在
    中编辑您的答案,包括或作为…
    部分?我想你在评论中写了一些东西,但可能是不小心漏掉了。添加
    #include
    #include
    作为文件中的第一个头并不会对错误消息产生任何影响。@Sriram:当然,我的意思是排他性的。不是“添加”。添加它只会确保声明冲突。我的赌注是从
    EST_String.h
    中删除声明,因为它在那里没有任何业务:它属于系统头(stdlib.h/cstdlib)OK。那么,这是否意味着在我更改了标题中的某些内容之后,我需要重新编译Festival或至少“speech_tools”,这是标题所在的项目?否。