来自文件C++的节点迷宫

来自文件C++的节点迷宫,c++,pointers,C++,Pointers,我有以下定义的类节点: class Node { public: Node(string newName); Node(); void setNodeName(string newName); string getNodeName(); void attachNewNode(Node *newNode, int direction); Node *getAttachedNode(int direction); p

我有以下定义的类节点:

class Node
{
   public:
      Node(string newName);
      Node();
      void setNodeName(string newName);
      string getNodeName();
      void attachNewNode(Node *newNode, int direction);
      Node *getAttachedNode(int direction);
   private:
      string name;
      Node *attachedNodes[4];
};

Node::Node(string newName)
{
   name = newName;
}

Node::Node()
{};

void Node::setNodeName(string newName)
{
   name = newName;
}

string Node::getNodeName()
{
   return name;
}

void Node::attachNewNode(Node *newNode, int direction)
{
   attachedNodes[direction] = newNode;
}

Node* Node::getAttachedNode(int direction)
{
   return attachedNodes[direction];
}
我有一个文件Maze1.txt:

9
A1
C3
A1 A2 B1 * *
A2 * B2 A1 *
A3 * B3 * *
B1 * * * A1
B2 B3 C2 * A2
B3 * * B2 A3
C1 C2 * * *
C2 C3 * C1 B2
C3 * * C2 *
其中9是要创建的节点数,A1是我们将开始导航的节点,C3是我们将尝试查找路径的节点,以下几行表示节点本身及其关联的指针。例如:

A1 A2 B1 * *
表示节点A1具有指向北面节点A2、东面节点B1、南面节点null和西面节点null的指针

A2 * B2 A1 *
表示节点A2的指针指向北部的节点null、东部的节点B2、南部的节点A1和西部的节点null

A2 * B2 A1 *
我正在尝试创建一个函数来构建节点迷宫。下面将私有变量节点startNode和endNode设置为各自的节点,并将numNode设置为文件给定的节点数

如何处理字符串数据,为所有节点标题创建节点,然后在适当的地方分配指针。尝试:

ifstream instream;
instream.open("Maze1.txt");
string line;
string data;
int numLines = 1;
int numNodes;
Node startNode();
Node endNode();

while(getline(instream, line))
{
   istringstream iss(line);
   data += line + "\n";
   iss.clear();

   if(numLines == 1)
   {
      istringstream buffer(line);
      buffer >> numNodes;
   }
   if(numLines == 2)
      Node startNode(line);
   if(numLines == 3)
      Node endNode(line);

   if(numLines > 3)
   {
      Node temp(line.substr(0,2));
      rooms.push_back(temp);
   }

   iss.clear();
   numLines++;
}
这将创建并填充一个节点向量,每个节点都命名为文件的每个字符串行中提到的第一个节点。在这个循环之后,我需要运行另一个循环,查看字符串的每一部分,并将指针分配给向量中适当的节点。尝试:

ifstream repeat;
repeat.open(filename);
numLines = 1;
skipBlanks = 1;
int roomNum = 0;

while(getline(repeat, line))
{
   if(line.empty())
   {}
   else
   {
      istringstream iss(line);

      if(numLines == 1)
         skipBlanks++;
      if(numLines == 2)
         skipBlanks++;
      if(numLines == 3)
         skipBlanks++;

      if(numLines > 3 && skipBlanks > 3)
      {
         int first = line.find(" ", 0);
         int second = line.find(" ", first + 1);
         int third = line.find(" ", second + 1);
         int fourth = line.find(" ", third + 1);

         for(int i = 0; i < rooms.size(); i++)
         {
            if(rooms[i].getNodeName() == line.substr(first+1,2))
               rooms[roomNum].attachNewNode(&rooms[i],1);
            if(rooms[i].getNodeName() == line.substr(second+1,2))
               rooms[roomNum].attachNewNode(&rooms[i],2);
            if(rooms[i].getNodeName() == line.substr(third+1,2))
               rooms[roomNum].attachNewNode(&rooms[i],3);
            if(rooms[i].getNodeName() == line.substr(fourth+1,2))
               rooms[roomNum].attachNewNode(&rooms[i],4);
         }
      }

      roomNum++;
      numLines++;
      iss.clear();
   }
}

这个程序实际上是编译的,但是我看到了一个片段faultcore转储,我只能猜测它来自一个越界错误?有人能帮我解释为什么会发生这种事吗?除了故障之外,我的程序是否在做它应该做的事情?我应该做些什么来避免这个故障?

听起来更像是家庭作业,而不是一个同等的问题,努力找到解决方案试着调试程序并检查分段故障发生在哪一行。请参阅以下常见原因列表,以及。