2016-09-09 2 views
0

sagen, dass ich den folgenden Code haben:
class.hWarum ist std :: regex kein gültiger Typ?

#ifndef CLASS_H 
#define CLASS_H 

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

#endif 

class.cpp

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

Kompilieren dies in der folgenden Fehler führt:

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

Ich bin aber dazu in der Lage Verwenden Sie die std :: regex-Bibliothek auf andere Weise? läuft auf GCC 6.1.1. Außerdem wurde versucht, explizit mit dem Flag -std = C++ 11 zu kompilieren.

+0

'# include ' in 'class.h'. – songyuanyao

+0

@PeteBecker 'basic_regex' ist Klassenvorlage,' regex' ist nicht. – songyuanyao

+0

@songyuanyao Ich kann nicht glauben, dass ich das vermisst habe – Jzk

Antwort

4
#ifndef CLASS_H 
#define CLASS_H 

#include <regex> 

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

#endif 

Funktioniert gut, wenn Sie die Bibliothek tatsächlich in Ihre Klasse aufnehmen.

Example

0

Für eine Klasse verwenden, haben Sie mehrere Möglichkeiten: Der erste Weg ist, einschließlich Header-Datei der Klasse vor der ersten Nutzung. Wenn Sie die Kopfzeile nicht einfügen möchten, können Sie forward declaration verwenden, aber im Falle von Std-Klassen kann dies ein undefiniertes Verhalten verursachen. Hier ist ein Beispiel für die Verwendung Vorwärtsdeklaration für std Klassen: Forward declare an STL container?

Verwandte Themen