来自文件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转储,我只能猜测它来自一个越界错误?有人能帮我解释为什么会发生这种事吗?除了故障之外,我的程序是否在做它应该做的事情?我应该做些什么来避免这个故障?听起来更像是家庭作业,而不是一个同等的问题,努力找到解决方案试着调试程序并检查分段故障发生在哪一行。请参阅以下常见原因列表,以及。