When I write code like this in VS 2008:
.h struct Patterns { string ptCreate; string ptDelete; string ptDrop; string ptUpdate; string ptInsert; string ptSelect; }; class QueryValidate { string query; string pattern; static Patterns pts; public: friend class Query; QueryValidate(const string& qr, const string& ptn): query(qr), pattern(ptn) {} bool validate() { boost::regex rg(pattern); return boost::regex_match(query, rg); } virtual ~QueryValidate() {} };
I then initialize my structure like this:
.cpp string QueryValidate::pts::ptCreate = 'something'; string QueryValidate::pts::ptDelete = 'something'; //...
The compiler gives the following errors:
‘Patterns’: the symbol to the left of a ‘::’ must be a type ‘ptSelect’ : is not a member of ‘QueryValidate’
What am I doing wrong? Is this a problem with Visual Studio or with my code? I know that static members except for const ones must be defined outside the class they were declared in.
You’re trying to create a non-static member (ptCreate) of a static member (pts). This won’t work like this.
You got two options, either use a struct initializer list for the Patterns class.
Or, much safer (and better in my opinion), provide a constructor in Patterns and call that one.
On a side not, your code wouldn’t work in any C++ compiler, it’s not a conflict with Visual Studio things.