c++ NetBeans在获取指针子向量中元素的字符串值时出错



我试图在元素类中包含一个指针向量。所以元素对象会包含子元素。错误是"收到信号: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成为类的公共成员(现在我要求投票!)

相关内容

  • 没有找到相关文章

最新更新