在构造函数中初始化struct的向量

时间:2013-11-03 15:32:52

标签: c++ vector constructor struct

我不知道如何在构造函数中初始化struct的向量。谁能给我指点? ^^

这是我的结构:

struct Point {
int x;
int y;
};

这是我的头文件:

class ShapeTwoD {
private:
string name;
bool containsWarpSpace;
vector<Point> vertices;
public:    
ShapeTwoD();
ShapeTwoD(string,bool,vector<Point>);

virtual string getName();
virtual bool getContainsWarpSpace();
virtual string toString();

vector<Point> points;

virtual double computeArea() = 0;
virtual bool isPointInShape(int,int) = 0;
virtual bool isPointonShape(int,int) = 0;

virtual void setName(string);
virtual void setContainsWarpSpace(bool);
};

这是我的.cpp文件:

ShapeTwoD::ShapeTwoD() {
name = "";
containsWarpSpace = true;
vertices = "";
}

ShapeTwoD::ShapeTwoD(string name, bool containsWarpSpace,vector<Point>vertices) {
this->name = name;
this->containsWarpSpace = containsWarpSpace;
this->vertices = vertices;
}

它给了我这个错误:

  

ShapeTwoD.cpp:12:错误:'((ShapeTwoD *)中的'operator ='不匹配) - &gt; ShapeTwoD :: vertices =“”'   /usr/include/c++/4.4/bits/vector.tcc:156:注意:候选人是:std :: vector&lt; _Tp,_Alloc&gt;&amp; std :: vector&lt; _Tp,_Alloc&gt; :: operator =(const std :: vector&lt; _Tp,_Alloc&gt;&amp;)[with _Tp = Point,_Alloc = std :: allocator]

2 个答案:

答案 0 :(得分:2)

根据要求:
错误消息指出vertices = ""没有定义。然而,该向量已经存在(并且为空),因此不能初始化 如果需要,可以通过vertices.push_back("");将空字符串附加到向量

答案 1 :(得分:0)

看起来你正试图将矢量初始化为空。

编译器会为您创建一个空向量,因此您不需要。

将ShapeTwoD实例中的数字和布尔值初始化为合理的默认值,与containsWarpSapce变量一样。

ShapeTwoD::ShapeTwoD() 
  containsWarpSpace = true;
}

您可以改用初始化列表。这对于这个例子来说并不重要,但如果你的对象是非平凡的类型,这是一个很好的做法。

// Preferred: use initializer list.
ShapeTwoD::ShapeTwoD() 
:  containsWarpSpace(true)
{}