斯坦福大学CS 106B在添加到结构向量时出错——编译器问题



我试图在线学习斯坦福大学的CS 106B课程,但当我试图向结构向量添加元素时,我遇到了麻烦。知道发生了什么事吗?

   struct point {                  // Definition for our "point" structure
    int x;
    int y;
    };
Vector<point> pointVector;
point derp;
derp.x = 1;
derp.y = 2;
pointVector.add(derp);

不幸的是,当我尝试这样做时,XCode中出现了两个错误。第一个是"Template argument使用本地类型'point'。"第二个是"请求'pointVector'中的成员'add',它是非类类型'int'。这是我的编译器的某种问题吗?从文档来看,这应该有效。

2011年之前,该语言有一个奇怪且毫无意义的限制:模板参数不能涉及本地类型。这一点已在2011年的标准中得到固定。

要修复第一个错误,请执行以下操作之一:

  • point的定义从函数中移到类或命名空间中;或
  • 在编译器中启用C++11支持,如果不能做到这一点,可以使用最新的编译器

第二个错误是第一个错误的连锁效应;编译器无法确定pointVector的类型,因此它决定假装它是int并继续执行。一旦修复了第一个错误,错误就会消失。

尝试进行

typedef struct point {                  // Definition for our "point" structure
    int x;
    int y;
}point;
std::vector<point> pointVector;
point derp;
derp.x = 1;
derp.y = 2;
pointVector.add(derp);

struct point {                  // Definition for our "point" structure
    int x;
    int y;
    };
std::vector<struct point> pointVector;
point derp;
derp.x = 1;
derp.y = 2;
pointVector.add(derp);

这样就可以了。

相关内容

最新更新