我目前有一个如下所示的课程。
#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
有任何关于如何解决此问题的建议将不胜感激
答案 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类型的转换?你也试图用类本身来定义你的类成员,这会导致鸡/蛋问题(你试图定义一个包含外部类本身的集合的成员)。