当我在 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() {}
};
然后我像这样初始化我的结构:
.cpp
string QueryValidate::pts::ptCreate = "something";
string QueryValidate::pts::ptDelete = "something";
//...
编译器给出以下错误:
“模式”:“::”左侧的符号必须是类型“ptSelect”:不是“QueryValidate”的成员
我究竟做错了什么?这是 Visual Studio 还是我的代码的问题?我知道除了 const 之外的静态成员必须在声明它们的类之外定义。