-2

我不知道如何在构造函数中初始化结构向量。任何人都可以给我指点?^^

这是我的结构:

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*)this)->ShapeTwoD::vertices = ""' /usr/include/c++/4.4/bits/vector.tcc:156 中的 'operator=' 不匹配: 注意:候选者是: std::vector<_Tp, _Alloc>& std::vector<_Tp, _Alloc>::operator=(const std::vector<_Tp, _Alloc>&) [with _Tp = Point, _Alloc =标准::分配器]

4

2 回答 2

2

根据要求:
错误消息指出没有vertices = "". 然而,向量已经存在(并且是空的),因此不能被初始化。如有必要
,可以通过向向量附加一个空字符串vertices.push_back("");

于 2013-11-03T16:07:18.777 回答
0

看起来您正在尝试将向量初始化为空。

编译器会为你创建一个空向量,所以你不需要。

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

ShapeTwoD::ShapeTwoD() 
  containsWarpSpace = true;
}

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

// Preferred: use initializer list.
ShapeTwoD::ShapeTwoD() 
:  containsWarpSpace(true)
{}
于 2013-11-03T16:43:33.233 回答