2

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

#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  

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

4

2 回答 2

4

我相信,定义std::map<int,SomeClass>中的 C++ 预处理器令人困惑。

删除宏并手动定义您的设置器/获取器。

或者创建一个typedef

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

并使用:

IMPLEMENT_SET_GET_METHOD(MyMap,hf);
于 2013-06-12T11:21:07.470 回答
0

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

于 2013-06-12T11:31:20.310 回答