我试图在元素类中包含一个指针向量。所以元素对象会包含子元素。错误是"收到信号:SIGSEGV(分段错误)"。错误发生在这一行"string test44 = test333[0]->GetVElement();"
我假设元素对象没有被推回,或者获得子向量的代码是错误的。
代码张贴在下面。如果您还需要什么,请告诉我。
Element.cpp --------------------
Element::Element() {
this->vLineNo = -1;
this->vElement = " ";
this->vContent = " ";
vector<Element*> temp;
this->ChildElementVctr = temp;
}
//4 parameter constructor
Element::Element(int lineno, string vElement, string vContent,vector<Element*> vVector){
this->vLineNo = lineno;
this->vElement = vElement;
this->vContent = vContent;
this->ChildElementVctr = vVector;
}
void Element::SetChildElementVctr(vector<Element*> ChildElementVctr) {
this->ChildElementVctr = ChildElementVctr;
}
vector<Element*> Element::GetChildElementVctr() const {
return ChildElementVctr;
}
Main.cpp -----------------
vector<Element*> TestVector;
Element* obj_Element = new Element();
obj_Element->SetVLineNo(1); // calls setter function of the class Element to assign Line number
obj_Element->SetVElement("TestElement"); // calls setter function of the class Element to assign Element tag name
obj_Element->SetVContent("TestContent");
Attribute* obj_Attribute = new Attribute();
obj_Attribute->SetVName("AttributeName");
obj_Attribute->SetVValue("AttributeValue");
obj_Element->GetAttributeVctr().push_back(obj_Attribute);
TestVector.push_back(obj_Element);
TestVector[0]->GetChildElementVctr().push_back(obj_Element); //push back the elemenet object to the Child Element Vector
string test11 = TestVector[0]->GetVElement();
vector<Element*> test333 = TestVector[0]->GetChildElementVctr(); //gets the vector of pointers of Child elements
string test44 = test333[0]->GetVElement(); //ERROR occurs here
Element.h——
class Element {
public:
Element();
Element(int lineno, string vElement,string vContent, vector<Element*> vVector);
Element(const Element& orig);
void SetChildElementVctr(vector<Element*> ChildElementVctr);
vector<Element*> GetChildElementVctr() const;
private:
int vLineNo ;
string vElement;
string vContent;
vector<Element*> ChildElementVctr;
vector<Attribute*> AttributeVctr;
您的功能
vector<Element*> Element::GetChildElementVctr() const {
return ChildElementVctr;
}
按值返回一个向量。它复制了向量。无论你用它做什么,都不会影响你的班级成员。当你push_back()
元素时,你把它们推到副本上。当稍后访问成员向量的第一个元素(或者更准确地说,访问它的另一个副本)时,最终访问的是不存在的元素。
要解决这个问题,请摆脱您的访问器函数并使vector成为类的公共成员(现在我要求投票!)