c – 为什么我不能在VS2008的类中使用静态成员,例如静态结构?
发布时间:2020-12-16 10:38:07 所属栏目:百科 来源:网络整理
导读:当我在VS 2008中编写这样的代码时: .hstruct Patterns { string ptCreate; string ptDelete; string ptDrop; string ptUpdate; string ptInsert; string ptSelect; }; class QueryValidate { string query; string pattern; static Patterns pts;public: fr
当我在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"; //... 编译器给出以下错误:
我究竟做错了什么?这是Visual Studio或我的代码的问题吗?我知道除了const之外的静态成员必须在声明它们的类之外定义. 解决方法
您正在尝试创建静态成员(pts)的非静态成员(ptCreate).这不会像这样工作.
您有两个选项,要么使用Patterns类的struct初始化列表. Patterns QueryValidate::pts = {"CREATE","DELETE"}; // etc. for every string 或者,更安全(在我看来更好),在Patterns中提供构造函数并调用它. struct Patterns { Patterns() { /*...*/ } /* ... */ } 不是这样,你的代码在任何C编译器中都不起作用,它与Visual Studio的东西没有冲突. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |