我试图在线学习斯坦福大学的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);
这样就可以了。