3

私はregexC++で使用しようとしています。以下は私のコードです:

#include<iostream>
#include<stdlib.h>
#include<string.h>
#include<regex>
using namespace std;

int main(int argc, char** argv) {
    string A = "Hello!";
    regex pattern = "(H)(.*)";
    if (regex_match(A, pattern)) {
        cout << "It worked!";
    }
    return 0;
}

しかし、私はこのエラーが発生しています:

In file included from /usr/lib/gcc/i686-pc-cygwin/4.5.3/include/c++/regex:35:0,
                 from main.cpp:12:
/usr/lib/gcc/i686-pc-cygwin/4.5.3/include/c++/bits/c++0x_warning.h:31:2: error: #error This file requires compiler and library support for the upcoming ISO C++ standard, C++0x. This support is currently experimental, and must be enabled with the -std=c++0x or -std=gnu++0x compiler options.

これをどのように解決できますか?何が問題なのですか?

4

3 に答える 3

6

-std=c++0x または -std=gnu++0x コンパイラ オプションで有効にする必要があります。

-std=c++0xこれらのオプションの 1 つまたは-std=gnu++0xをコンパイラ コマンドに追加します。

g++ -std=c++0x ...

std::regexがサポートされていない場合はboost::regex、別の方法を参照してください。

于 2012-12-12T09:45:20.727 に答える
2

新しい C++11 標準の一部である正規表現クラスを使用しようとしているようですが、コンパイラにその標準にコンパイルするように指示していません。

-std=c++0x をコンパイラ フラグに追加して、再試行してください。

編集: gcc 実装ステータス ページが示すように、gcc での正規表現サポートは完全にはほど遠いです。したがって、正しいフラグを追加してもまだ役に立ちません。正規表現のサポートが必要な場合は、boostを試すことができます。

于 2012-12-12T09:46:21.190 に答える
2

単純に追加するだけ

g++ -std=gnu++0x <filename.cpp>

また

g++ -std=c++0x <filename.cpp>

正常に動作します

于 2015-09-29T11:42:33.603 に答える