C++ Stanford CS 106B添加到结构向量时出错—;编译器有问题吗?

C++ Stanford CS 106B添加到结构向量时出错—;编译器有问题吗?,c++,vector,struct,C++,Vector,Struct,我试图跟随斯坦福的CS106B在线课程,但当我试图向结构向量添加元素时,我遇到了麻烦。知道发生了什么吗 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);

我试图跟随斯坦福的CS106B在线课程,但当我试图向结构向量添加元素时,我遇到了麻烦。知道发生了什么吗

   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);
struct point{//我们的“点”结构的定义
int x;
int-y;
};
向量点向量;
德普点;
derp.x=1;
derp.y=2;
pointVector.add(derp);
不幸的是,当我尝试这个方法时,我在XCode中得到了两个错误。第一个是“模板参数使用本地类型‘point’”,第二个是“对成员‘add’in‘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);
typedef结构点{//我们的“点”结构的定义
int x;
int-y;
}点;
std::向量点向量;
德普点;
derp.x=1;
derp.y=2;
pointVector.add(derp);

struct point{//我们的“点”结构的定义
int x;
int-y;
};
std::向量点向量;
德普点;
derp.x=1;
derp.y=2;
pointVector.add(derp);
这应该可以做到。

试着去做

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);
typedef结构点{//我们的“点”结构的定义
int x;
int-y;
}点;
std::向量点向量;
德普点;
derp.x=1;
derp.y=2;
pointVector.add(derp);

struct point{//我们的“点”结构的定义
int x;
int-y;
};
std::向量点向量;
德普点;
derp.x=1;
derp.y=2;
pointVector.add(derp);

这应该可以做到。

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

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

  • 点的定义移出函数,移到类或命名空间中;或
  • 在您的编译器中启用C++11支持,或者如果不能做到这一点,则使用更为最新的编译器

第二个错误是第一个错误的连锁反应;编译器未能确定
点向量的类型,因此它毫无帮助地决定假装它是
int
,并继续执行。一旦修复了第一个错误,错误就会消失。

在2011年之前,这种语言有一个奇怪而无意义的限制:模板参数s不能包含本地类型。这已在2011标准中修复

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

  • 点的定义移出函数,移到类或命名空间中;或
  • 在您的编译器中启用C++11支持,或者如果不能做到这一点,则使用更为最新的编译器

第二个错误是第一次的敲击效应;编译器无法确定<代码>类型的Point vector < /C> >,因此它无助地假装它是代码“INT/INGED>”并继续进行。一旦修复第一个错误,错误就应该消失。

标准C++中没有<代码>向量< /代码>。你是指<代码> STD::向量< /代码>,或者您正在使用自定义容器?您可以发布实际代码吗?您必须在(成员)中执行分配函数< <代码> vector < /C> >,或者您是否错误地将其定义为“代码> STD::vector < /Calp>?”您可能在函数内这样做吗?@拉斯曼和K-Balo,它是CS 106B库的一部分。在头向量中,H.在标准C++中没有<代码>向量< /代码>。你是指“代码> STD::向量< /代码>,还是你是我们?定制容器?你能发布实际代码吗?你必须在(成员)中进行分配函数。
Vector
是否存在,或者您是否将其误认为是
std::Vector
?您是否可能在函数内部执行此操作?@larsmans和K-ballo-向量类是CS 106B库的一部分。在头Vector.h中,
typedef
对于
struct
是不必要的。不需要使用关键字
 结构及其类型。也没有
std::Vector
std::Vector
没有
add()
方法,因此看起来OP使用的是不同的
向量
类。无论如何,这不是错误背后的原因。示例代码中还有一些不必要的
结构
类型定义
类型定义
对于
结构
是不必要的。不需要使用关键字
结构
及其类型。也没有
std::Vector
std::Vector
没有
add()
方法,因此看起来OP使用的是不同的
向量
类。在任何情况下,这都不是错误背后的原因。示例代码中还有一些不必要的
结构
类型定义