我是C ++的新手。我正在学习如何使用模板。 我的目标是创建“int”和“SpacePlace”PropertyType对象。 由于每个方法字符串“GrabCoordinates(...)”中的错误“C2228”(MSVC 2010),下一个代码不起作用。
struct SpacePlace
{
float x,y,z;
};
template <class SomeType> class PropertyType
{
SomeType variable;
public:
void GrabCoordinates(SpacePlace *obj)
{
variable.x=obj->x;
/*varibale.x is wrong, "left of '.identifier' must
have class/struct/union"*/
variable.y=obj->y;//similiar error
variable.z=obj->z;//similiar error
}
...//some code
};
int main()
{
PropertyType <SpacePlace> coordinates;
PropertyType <int> just_a_number;
...//some code
}
我只是想知道,有可能实现我的目标吗?或者c ++中的模板中的字段应该只是“简单类型”?对不起我的英文:)谢谢。
答案 0 :(得分:3)
你需要这样:
template <class SomeType> class PropertyType
{
SomeType variable;
public:
void GrabCoordinates(const SomeType& obj)
{
variable=obj;
}
//..some code
};
答案 1 :(得分:0)
问题在于PropertyType <int>
:在模板的这个实例化中,variable
被声明为int,所以你最终会得到像
int变量; // ... variable.x = obj-&GT; Y;
由于int
没有.x
成员而失败。
通常,您在模板中实例化的类型必须能够履行您在模板代码中对其施加的所有“义务”。在您的情况下,这是.x
成员,但它也可以是赋值,比较,增量等。
答案 2 :(得分:0)
对于PropertyType <int>
,variable
的类型为int
。所以就好像你试过了一样:
int variable;
variable.x = ojb->x;