C ++类定义编译问题

时间:2011-02-27 01:22:55

标签: c++ templates compiler-errors

我看了一遍,我找不到与我的问题有关的任何事情。我试图为一个多边形类编写一个类定义,该类基本上有一个包含指向点的指针的向量。当我尝试编译时,我会继续解决以下错误......

错误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;
    }

};

4 个答案:

答案 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变量。