0

C++ プロジェクトで GNU C ライブラリの正規表現機能を使用しようとしています。特に、regex_t regcomp、regexec、regfree 関数を使用しようとしています。コンパイル時に、これらのシンボルが未定義であることを示すエラーが表示されます。

me> g++ -I/me/myheaders/ -c RootGenerator.cpp -o RootGenerator.o -std=gnu++0x -Wall

RootGenerator.cpp: In function ‘std::string findFirstFileInCurrentDirectory(std::string)’:
RootGenerator.cpp:1072: error: ‘regex_t’ was not declared in this scope
RootGenerator.cpp:1072: error: expected ‘;’ before ‘re’
RootGenerator.cpp:1073: error: ‘re’ was not declared in this scope
RootGenerator.cpp:1073: error: ‘REG_EXTENDED’ was not declared in this scope
RootGenerator.cpp:1073: error: ‘REG_NOSUB’ was not declared in this scope
RootGenerator.cpp:1073: error: ‘regcomp’ was not declared in this scope
RootGenerator.cpp:1074: error: expected ‘;’ before ‘int’
RootGenerator.cpp:1084: error: ‘status’ was not declared in this scope
RootGenerator.cpp:1084: error: ‘regexec’ was not declared in this scope
RootGenerator.cpp:1092: error: ‘REG_NOMATCH’ was not declared in this scope
RootGenerator.cpp:1108: error: ‘regfree’ was not declared in this scope

正規表現ヘッダーは TR1 実装であるため、私のバージョンの GCC では実験的であることがわかりました。-std=gnu++0x最初にコンパイルしようとしたときに受け取ったコンパイラの警告に従ってコンパイラ オプションを追加しましたが、これで問題が解決するようには見えません。これは、システムが「実験的」ヘッダーへのパスを認識して追加しないという問題ですか? 指定する必要がある追加のインクルード パスまたはコンパイラ オプションはありますか?

追加のメモとして、Eclipse/CDT で、Project Explorer ビューの「includes」タブの下に、システム ヘッダー パスのリストが表示されていることに気付きました。/user/include/c++/4.4.4 パス タブの下に多くのヘッダー ファイルが一覧表示されますが、正規表現ヘッダーは一覧表示されません。これも設定の問題があることを再認識させていると思います。

4

1 に答える 1

0

問題が見つかりました:

#include <regex>

する必要があります

#include <regex.h>

ヘッダーは正規表現のregex.hGNU C ライブラリ実装であり、ソースで使用しようとしていた関数が含まれています。ヘッダーはregexTR1 (および不完全な) 正規表現の実装です。だから@Oli、結局、関連するヘッダーを参照していませんでした!

于 2013-05-31T17:10:01.463 に答える