错误:在静态模板中的''之前的预期构造函数,析构函数或类型转换

时间:2013-11-10 10:17:47

标签: c++ templates static

我试图修改一个可以通过字符串搜索的函数指针表。 我定义了以下模板类,但我遇到静态成员问题。

我遇到的错误是

     test.cpp:18: error: expected constructor, destructor, or type conversion 
     before ‘Attribute’

即使添加构造函数它也不起作用:你知道编译器告诉我的原因是什么,以及这段简单代码中缺少什么?

     #include<iostream>
     #include<map>
     #include<boost/function.hpp>

     using namespace std;
     using namespace boost;

     template<class T>
     class Attribute {
     public:             
       typedef map<string, boost::function<void(T*,string) > > Params;
       static Params params_;
     };

     template<class T>
     T::Params Attribute<T>::params_;

你能帮助我吗?

1 个答案:

答案 0 :(得分:3)

typename之前需要T::Params

template<class T>
class Attribute
{
public:
    typedef map<string, boost::function<void(T*,string) > > Params;
    static typename T::Params params_;
           ^^^^^^^^^^^^
};

template<class T>
typename T::Params Attribute<T>::params_;
^^^^^^^^

或者...

template<class T>
class Attribute
{
public:
    typedef map<string,int > Params;
    static Params params_;
};

template<class T>
typename Attribute<T>::Params Attribute<T>::params_;
^^^^^^^^^^^^^^^^^^^^^^^