0

出于某种原因 boost::regex 使我的应用程序重载并且它冻结而没有错误,但它编译得很好。例如,此代码完全失败。我究竟做错了什么?我更新到 boost 1.47 看看它是否是一个 DLL 错误,但它仍然不起作用。我可以获得一个示例程序来测试 boost::regex 吗?

static const boost::regex expression("^[0-9]+");
std::string str = "123a1";
std::cout << boost::regex_search(str.c_str(), expression);
4

2 回答 2

0

经过一些工作,我从 BoostPro 中删除了 boost 安装并自己编译了 boost,现在它可以工作了。问题是 BoostPro 没有安装所有的 DLL,当它问我缺少的 DLL 时,我想 BoostPro 将它们命名为错误的(boost_regex-vc100-mt-1_47.dll而不是boost_regex-vc100-mt-gd-1_47.dll)。获得正确的 DLL 后一切正常。感谢您帮助解决此问题!

于 2011-08-02T20:06:24.567 回答
0

首先要做的是查看您的 Boost 版本是否支持线程。编译和运行类似下面的内容应该告诉你:

#include <iostream>
#include <boost/regex.hpp>

int
main()
{
#ifdef BOOST_HAS_THREADS
    std::cout << "Boost has threads" << std::endl;
#else
    std::cout << "Boost doesn't support threads" << std::endl;
#endif
    return 0;
}

第二件事是验证是否满足所有要求。您刚刚发布了实际行,而不是执行它们的上下文。如果第一行在命名空间范围内,你应该没问题(除非你已经开始在构造函数中线程化到静态对象,在输入之前main:不要这样做)。如果第一行具有块作用域(即在函数中),那么只有在线程开始之前首次调用该函数时才可以。(据我了解,使用 g++,即使第一行具有块范围,您也应该没问题,但我不确定。)

于 2011-08-02T09:11:52.463 回答