在类中的头文件中访问私有向量

时间:2013-07-07 07:27:40

标签: c++ vector private

我试图访问我的类Polygon.cpp中的头类Polygon.h中的私有向量数组我尝试使用getter,但它不允许我用类本身的实例调用该函数。我该怎么做呢?

#include <string>
#include <vector>
#include "point.h"

class Polygon {

private:
    std::vector<Point> pts;
public:

    Polygon();
    static Polygon parsePolygon(std::string s);
    std::string toString() const;
    void move(int dx, int dy);
    double perimeter() const;
    double area() const;
    int getNumVertices() const;
    bool operator == (const Polygon &p) const;
    double isperimetricQuotient() const;
    Point getIthVertex(int i) const {return pts[i];}
    std::vector<Point> const &getPolygon() const {return pts;}
};

//Polygon.cpp

#include "Polygon.h"
#include <string>

Polygon::Polygon()
{
    pts.resize(4);
    Point p1(-1,1); 
    Point p2(1,1);
    Point p3(1,-1);
    Point p4(-1, -1);
    pts[0] = p1;
    pts[1] = p2; 
    pts[2] = p3;
    pts[3] = p4;

}



static Polygon parsePolygon(std::string s)
{
int seperator;
int start = 1;
for(int i = 0; seperator != std::string::npos; i++)
{
seperator = s.find(")(");
std::string subPoint = s.substr(start, seperator);
getIthVertex(i) = Point.parsePoint(subPoint);
start = seperator + 1;
}

}

void move(int dx, int dy)
{
for(int i = 0; i < *this.getPolygon().size(); i++)
{

}
}

2 个答案:

答案 0 :(得分:0)

parsePolygon的定义应为:

Polygon  Polygon::parsePolygon(std::string s) {
    ....
}

答案 1 :(得分:0)

有很多问题。一个显而易见的是move()成员函数的定义。它永远不会真正定义:你有一个同名的非成员函数。因此,您必须在Polygon范围内定义它。接下来,*this.size()没有按照您的想法执行操作:它被解析为*(this.size())。无论如何,您不需要this,因此很容易修复:

void Polygon::move(int dx, int dy)
{
  for(int i = 0; i < getPolygon().size(); ++i)
  {

  }
}

parsePolygon的定义存在类似的问题,应该是

Polygon Polygon::parsePolygon(std::string s)
{
  ......
}