2

我是 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++ 中模板中的字段应该只是“简单类型”?对不起我的英语:) 谢谢。

4

3 回答 3

3

你需要这样:

template <class SomeType> class PropertyType
{
    SomeType variable;

    public:
    void GrabCoordinates(const SomeType& obj)
    {
            variable=obj;

    }
    //..some code
 };
于 2013-10-03T18:31:09.557 回答
0

问题在于PropertyType <int>:在模板的这个实例化中,variable被声明为一个 int,所以你最终会得到类似的东西

整型变量;//... 变量.x=obj->y;

失败是因为 anint没有.x成员。

通常,您在模板中实例化的类型必须能够履行您在模板代码中强加给它的所有“义务”。在您的情况下,这是.x成员,但它也可以是分配、比较、增量等。

于 2013-10-03T18:30:53.707 回答
0

对于PropertyType <int>variable是 类型int。因此,就好像您尝试过:

int variable;
variable.x = ojb->x;
于 2013-10-03T18:30:54.723 回答