gpt4 book ai didi

c++ - BOOST_THROW_EXCEPTION 导致中止陷阱

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:00:34 26 4
gpt4 key购买 nike

我正在尝试使用 boost::exception 并将我的原型(prototype)代码压缩为 Boost exception tutorial 中的示例但是,当使用 BOOST_THROW_EXCEPTION 宏运行代码时,程序中止了。

#include <iostream>
#include <boost/exception/all.hpp>

typedef boost::error_info<struct tag_my_info,int> my_info;
struct my_error: virtual boost::exception, virtual std::exception { };

void f() {
BOOST_THROW_EXCEPTION(my_error() << my_info(42));

// Uncomment the below (and comment the above) for the program to work
//throw my_error() << my_info(42);
}

int main(int argc, char** argv) {
try {
f();
}
catch(my_error& x) {
if(int const* mi = boost::get_error_info<my_info>(x)) {
std::cout << "My info: " << *mi << std::endl;
}
}

return 0;
}

使用 BOOST_THROW_EXCEPTION 宏运行代码:

$ ./a.out 
Abort trap

如果像评论说的那样,我交换代码,一切都很好

$ ./a.out 
My info: 42

下面是 f() 的 g++ 预处理器的输出

void f() {
::boost::exception_detail::throw_exception_(my_error() << my_info(42),__PRETTY_FUNCTION__,"main.cpp",14);
}

软件版本为:

$ g++ -v
Using built-in specs.
Target: x86_64-apple-darwin10
Thread model: posix
gcc version 4.4.6 (GCC)

$ port list boost
boost @1.47.0 devel/boost

我在 OSX SL 上使用 MacPorts 提供的工具。我仔细检查了 g++ 搜索路径,只有一份 boost hpp 文件的拷贝,那是属于上述 boost 包的文件。

我不知道为什么要调用中止陷阱。我承认我是 C++ 的新手。

最佳答案

问题是由于使用了 MacPorts 版本的 g++ 引起的。 MP 系统中有大量与异常和中止陷阱相关的票证(Google 上有大量示例)。

使用 XCode 附带的 g++ 版本可以解决这个问题。

关于c++ - BOOST_THROW_EXCEPTION 导致中止陷阱,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8256874/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com