Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/128.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
C++ 使用Boost::Regex时出现问题(控制台刚刚冻结)_C++_Boost_Boost Regex - Fatal编程技术网

C++ 使用Boost::Regex时出现问题(控制台刚刚冻结)

C++ 使用Boost::Regex时出现问题(控制台刚刚冻结),c++,boost,boost-regex,C++,Boost,Boost Regex,出于某种原因,boost::regex重载了我的应用程序,它冻结了,没有出现错误,但编译很好。例如,此代码完全失败。我做错了什么?我更新到Boost1.47以查看它是否是DLL错误,但它仍然不起作用。我可以得到一个示例程序来测试boost::regex吗 static const boost::regex expression("^[0-9]+"); std::string str = "123a1"; std::cout << boost::regex_search(str.c_s

出于某种原因,boost::regex重载了我的应用程序,它冻结了,没有出现错误,但编译很好。例如,此代码完全失败。我做错了什么?我更新到Boost1.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;
}
第二件事是验证是否满足所有要求。 您只是发布了实际的行,而不是它们所在的上下文 执行。如果第一行在名称空间范围内,则应该可以 除非您已经开始在构造函数中线程化静态对象, 进入主管道前:不要这样做。如果第一行有阻塞 范围,即在函数中,则只有在第一次调用 此函数发生在线程开始之前。据我了解,, 使用g++,即使第一行有块作用域,也应该可以,但是
我不确定。

在做了一些工作之后,我从BoostPro中删除了boost安装,自己编译了boost,现在它可以工作了。问题是BoostPro没有安装所有的DLL,当它要求我提供一个缺少的DLL时,我想BoostPro给它们的名字是错误的boost_regex-vc100-mt-1_47.DLL,而不是boost_regex-vc100-mt-gd-1_47.DLL。获得正确的DLL后,一切正常。感谢您帮助解决此问题

这段代码与线程有什么关系?你在使用线程吗?是的,我在使用线程,但整个线程函数太大,无法发布。出于某种原因,即使我注释掉main中的所有内容,只执行boost::regex示例,程序也会崩溃。。。这种促进会包括彼此之间的冲突吗?我已经包括了boost::regex、boost::algorithm::string、boost::algorithm::string::regex、boost::thread、boost::mutex。我把代码放在一个空的main中,它工作得很好。我在Boost中使用静态链接,因此可能是DLL问题。Boost支持线程,我在应用程序中使用两个线程,代码太大,无法发布。正则表达式在线程函数中执行,以检查某些字符串是否与正则表达式匹配。我添加了一个程序方案。因此正则表达式本身具有块作用域。把它移出函数,看看这是否改变了什么。通常,局部静态变量在多线程环境中不起作用。至少在大多数编译器中,我把它移到了main,脱离了任何线程,它仍然会破坏程序。我不知道如何让它在一个函数之外执行。由于某种原因,即使我尝试在一个只包含boost::regex的新项目中使用它,上面的regex代码也会中断。我的语法不正确吗?