'std :: map':'SomeClass'不是参数'_Ty'的有效模板类型参数

时间:2013-06-12 11:18:01

标签: c++

我目前有一个如下所示的课程。

#define SET_METHOD( t , n ) \
private:    t n;    \
public:     void set_##n(  t value ) {  n = value; }

    class SomeClass
    {

        private: 
                    SET_METHOD(std::map<int,SomeClass>,hf);
    };

然而,当我做这样的事情时:

SomeClass sc;
hc.AddItem(1,sc);

我收到以下错误。我还有这些用于设置getter和setter的宏,但这次我不知道问题是什么。我收到以下错误

Error   3   error C2923: 'std::map' : 'SomeClass' is not a valid template type argument for parameter '_Ty' 
Error   4   error C2208: 'std::map<_Kty,_Ty>' : no members defined using this type  

有任何关于如何解决此问题的建议将不胜感激

2 个答案:

答案 0 :(得分:4)

我认为定义,中的std::map<int,SomeClass>让C ++预处理器感到困惑。

放下宏并手动定义你的setter / getters。

或者创建一个typedef

typedef std::map<int,SomeClass> MyMap;

并使用:

IMPLEMENT_SET_GET_METHOD(MyMap,hf);

答案 1 :(得分:0)

是否有从HistoricalFields类型到SomeClass类型的转换?你也试图用类本身来定义你的类成员,这会导致鸡/蛋问题(你试图定义一个包含外部类本身的集合的成员)。