使用Boost::Regex的问题(控制台只是冻结)



由于某些原因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);

首先要做的是查看您的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++中,即使第一行具有块作用域,也应该没问题我不确定。

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

最新更新