std::vector<std::vector<Node*>> paths;,修改代碼定義path的數量為agvs.size
时间: 2024-01-20 20:02:57 浏览: 22
你可以这样修改代码:
```
std::vector<std::vector<Node*>> paths(agvs.size());
```
这样就定义了一个大小为agvs.size()的vector,其中每个元素都是一个vector<Node*>类型的向量。然后你就可以在程序中使用这个paths向量了。
相关问题
void MainWindow::moveAgvs() { Astar astar; std::vector<std::vector<Node*>> paths(agvs.size());,怎麽在別的函數里引用moveagvs的局部變量path
在C++中,局部变量只能在其所在的函数内部使用,不能在其他函数中直接引用。如果想要在其他函数中使用局部变量,有以下两种方法:
1. 将局部变量声明为类的成员变量,这样其他函数就可以通过类的对象访问该变量。
例如,在MainWindow类中声明一个std::vector<std::vector<Node*>> paths成员变量,并在moveAgvs函数中将其赋值,然后就可以在其他函数中通过MainWindow对象访问该变量:
```
class MainWindow {
public:
void moveAgvs();
std::vector<std::vector<Node*>> paths;
};
void MainWindow::moveAgvs() {
Astar astar;
paths.resize(agvs.size());
// ...
}
void otherFunction(MainWindow& mainWindow) {
// 使用MainWindow对象的成员变量paths
// ...
}
```
2. 将局部变量作为参数传递给其他函数。
例如,在其他函数中声明一个std::vector<std::vector<Node*>>类型的参数,然后在调用该函数时将局部变量paths作为参数传递:
```
void otherFunction(std::vector<std::vector<Node*>>& paths) {
// 使用传递进来的paths变量
// ...
}
void MainWindow::moveAgvs() {
Astar astar;
std::vector<std::vector<Node*>> paths(agvs.size());
// ...
otherFunction(paths);
}
```
Astar astar; std::vector<std::vector<Node*>> paths(agvs.size()); // 得到agv的路綫 for (int i = 0; i < agvs.size(); i++) { Node* start_node = new Node(agvs[i].getCurrentX(), agvs[i].getCurrentY()); Node* end_node = new Node(agvs[i].getStartX(), agvs[i].getStartY()); Node* end_node1 = new Node(agvs[i].getEndX(), agvs[i].getEndY()); std::vector<Node*> path_to_start = astar.getPath(start_node, end_node); std::vector<Node*> path_to_end = astar.getPath(end_node, end_node1); // 去掉 end_node1 path_to_end.erase(path_to_end.begin()); std::vector<Node*> path; path.insert(path.end(), path_to_start.begin() + 1, path_to_start.end()); path.insert(path.end(), path_to_end.begin(), path_to_end.end()); paths[i] = path;,修改爲當agv的load狀態等於false時,將agv的current坐標和agv的start坐標輸入到getpath中,並存儲到path中
好的,那么修改后的代码应该是这样的:
```
Astar astar;
std::vector<std::vector<Node*>> paths(agvs.size());
// 得到agv的路綫
for (int i = 0; i < agvs.size(); i++) {
Node* start_node;
Node* end_node;
// 如果AGV的load状态为true,说明AGV当前正在运输货物,那么将其当前坐标和终点坐标输入到getpath中
if (agvs[i].getLoad()) {
start_node = new Node(agvs[i].getCurrentX(), agvs[i].getCurrentY());
end_node = new Node(agvs[i].getEndX(), agvs[i].getEndY());
}
// 如果AGV的load状态为false,说明AGV当前没有在运输货物,那么将其当前坐标和起点坐标输入到getpath中
else {
start_node = new Node(agvs[i].getCurrentX(), agvs[i].getCurrentY());
end_node = new Node(agvs[i].getStartX(), agvs[i].getStartY());
}
std::vector<Node*> path = astar.getPath(start_node, end_node);
// 如果AGV的load状态为false,说明AGV当前没有在运输货物,那么需要去掉终点节点
if (!agvs[i].getLoad()) {
path.erase(path.begin() + path.size() - 1);
}
paths[i] = path;
}
```
这样修改后,就可以根据AGV的load状态来决定输入到getpath中的终点坐标是起点坐标还是终点坐标,同时还能根据load状态来决定是否需要去掉路径中的终点节点。