我看了一遍,我找不到与我的问题有关的任何事情。我试图为一个多边形类编写一个类定义,该类基本上有一个包含指向点的指针的向量。当我尝试编译时,我会继续解决以下错误......
错误C2143:语法错误:缺少';'在'<'之前 错误C4430:缺少类型说明符 - 假定为int。 错误C2238:';'之前的意外标记 错误C2061:语法错误:标识符'vector' 错误C2065:'myPolygonPoints':未声明的标识符 错误C2065:'points':未声明的标识符 错误C2065:'myHasInstersection':未声明的标识符 错误C2660:'Polygon :: addSetOfPoints':函数不带1个参数
这是类
的代码#include "Point.h"
#include <vector>
class Point;
class Polygon
{
private:
vector<Point*> myPolygonPoints;
bool myHasIntersection;
public:
void addSetOfPoints(vector<Point*> points)
{
myPolygonPoints = points;
}
bool getHasIntersection()
{
return myHasIntersection;
}
void setHasIntersection(bool intersection)
{
myHasInstersection = intersection;
}
};
答案 0 :(得分:6)
您正在使用vector
命名空间中的std
而未对其进行限定。
您必须执行using namespace std;
或using std::vector
,或使用vector
命名空间声明所有std
个对象,例如std::vector
。
#include "Point.h"
#include <vector>
class Point; // Assuming Point.h has this declared,
// you don't need this forward declaration, but in reality,
// you don't need to include Point.h
// since you're only declaring pointers to Points
class Polygon
{
private:
std::vector<Point*> myPolygonPoints;
bool myHasIntersection;
public:
void addSetOfPoints(std::vector<Point*> points)
{
myPolygonPoints = points;
}
bool getHasIntersection()
{
return myHasIntersection;
}
void setHasIntersection(bool intersection)
{
myHasInstersection = intersection;
}
};
答案 1 :(得分:2)
vector在std :: namespace中。所以在你的示例代码
中未定义vector两种可能的解决方案:
#include <vector>
using std::vector;
或:(在所有情况下通过引用向量的代码,包括声明和引用)
private:
std::vector<Point*> myPolygonPoints;
public:
void addSetOfPoints(std::vector<Point*> points)
等
第三种解决方案如下:
#include <vector>
using namespace std;
最后一个,从编码风格的角度来看,我发现不太喜欢。原因是它将std命名空间中的所有内容完全导入到默认命名空间中。相比之下,我觉得最好明确导入我正在使用的部分,因为它可以让我跟踪我需要标题的原因。在这种情况下这没有意义(当然我需要<Vector>
,我正在使用std :: vectors)。在这样的情况下,它更具相关性:
#include <algorithm>
using std::adjacent_find;
哦是的,那是为什么我把它包括在内......
答案 2 :(得分:1)
如果您没有明确声明您正在使用std命名空间,则应该引用属于哪个命名空间向量。
答案 3 :(得分:0)
除std::vector
问题外,您还错误地使用了myHasIntersection
方法中的setHasIntersection
变量。