1

ブースト正規表現を使用してプログラムをコンパイルすると、次のようなコンパイル エラーが発生しました。

/usr/local/include/boost/regex/v4/regex.hpp:32:0 からインクルードされたファイルで、
             /usr/local/include/boost/regex.hpp:31 から、
             ProcessAffinityManager.cpp:38 から:
/usr/local/include/boost/regex/v4/regex_workaround.hpp: 関数 'size_t boost::re_detail::strcpy(char*, const char*)':
/usr/local/include/boost/regex/v4/regex_workaround.hpp:199:37: エラー: 'sizeInBytes' はこのスコープで宣言されていませんでした

しかし、ソース ファイルを調べるとregex_workaround.hppsizeInBytesが引数であり、エラーはここにあってはなりません。

4

1 に答える 1

0

より多くの情報が必要であるというコメンテーターに同意します..

ただし、minGW 4.8.1 を使用して作業しているプロジェクトでまったく同じ問題が発生しました。少し調査した結果、誰かが私たちのプロジェクトに次のようなマクロ ハックを追加したことがわかりました。

#define strcpy_s(A,B,C) strcpy(A,C)

私が推測するアイデアは、VS と MinGW の間の互換性の問題を解決することでした。VS は、strcpy_s(A,B,C) などの多くの C 文字列関数の「安全な」バージョンを定義します。Windows でコンパイルするときの多くのライブラリは、これらのバージョンの関数を使用しますが、古いバージョンの VS と MinGW では不足しています。

Boost::regex は、strcpy_s を見逃す可能性のある環境に対して strcpy_s を定義しようとすることで、この問題を解決します。これは、strcpy_s 呼び出しに strcpy の使用を強制しようとする醜いハックと衝突します。

あなたの問題が私のようなものである場合、解決策は strcpy_s ハックを追加した人を見つけ、そのような機能を提供する解決策に移ることです

于 2015-02-05T11:33:24.043 に答える