2016-09-09 4 views
0

は、私は次のコードを持って言う:これをコンパイルする
class.hなぜstd :: regexは有効な型ではありませんか?

#ifndef CLASS_H 
#define CLASS_H 

class Class 
{ 
    private: 
     std::regex* regex; 
}; 

#endif 

class.cpp

#include <regex> 
#include "class.h" 
// ... 

は、次のエラーが発生:

error: "regex" in namespace "std" does not name a type 
    std::regex* regex; 
     ^~~~~ 

私はしかしできる他の方法でstd :: regexライブラリを使用しますか? GCC 6.1.1で動作します。また、-std = C++ 11フラグを指定して明示的にコンパイルしようとしました。

+0

'class.h 'の' #include 'です。 – songyuanyao

+0

@PeteBecker 'basic_regex'はクラステンプレートであり、' regex'はクラステンプレートではありません。 – songyuanyao

+0

@songyuanyao私はそれを逃したとは思わない – Jzk

答えて

4
#ifndef CLASS_H 
#define CLASS_H 

#include <regex> 

class Class 
{ 
    private: 
     std::regex* regex; 
}; 

#endif 

実際にクラスにライブラリを組み込むとうまく動作します。 最初の方法は、最初の使用前に、クラスのヘッダファイルを含めている:

Example

0

は、クラスを使用するために、あなたはいくつかの方法があります。 ヘッダーを含めたくない場合はforward declarationを使用できますが、stdクラスの場合は未定義の動作が発生する可能性があります。 stdクラスの前方宣言の使用例を次に示します。 Forward declare an STL container?

関連する問題