나는 누군가 이걸로 나를 도울 수 있기를 바랍니다.오류 : 범위 밖의 벡터 아래 첨자 C++
이 프로그램을 수정하려고했지만 다른 것을 알지 못합니다. 나는이 오류를 벡터의 첨자가 범위를 벗어나지 못하게하고있다. 그러나 push_back을 사용하여 "main"에서 생성 된 각 변수에 객체를 추가 했으므로 문제가 무엇인지 알 수 없습니다.
문제는 9 개 도시로 구성된 일종의 그래프입니다. 각 도시는 하나의 도시와 직접 연결됩니다. "shortpath"함수를 사용하여 각 도시의 부모를 previous1 멤버에 추가합니다.
그러나 프로그램을 실행하면 메인의 push_backed에도 불구하고 도시의 변수 "neighbor1"의 크기가 0이라고 계속 알려줍니다.
#include<iostream>
#include<vector>
#include<queue>
#include<string>
using namespace std;
class City
{
public:
City();
City(string city);
string cityName;
int cityDistance;
vector<City> neighbor1;
bool visited1;
vector<City> previous1;
void addNeighbor(City c);
void shortPath(vector<City> cities);
void printPath(City final);
};
이
헤더 파일의 구현 :#include<iostream>
#include<vector>
#include<queue>
#include<string>
using namespace std;
#include"City.h"
City::City()
{
cityDistance = -1;
cityName = " ";
visited1 = false;
}
City::City(string city)
{
cityDistance = -1;
cityName = city;
visited1 = false;
}
void City::addNeighbor(City c)
{
neighbor1.push_back(c);
}
void City::shortPath(vector<City> cities)
{
queue<City*> q;
q.push(this);
for(unsigned int i = 0; i < cities.size(); i++)
{
cities[i].cityDistance = -1;
cities[i].visited1 = false;
}
q.front()->visited1 = true;
q.front()->cityDistance = 0;
while(!q.empty())
{
City * v = q.front();
if(v->neighbor1.size() != 0)
{
for(unsigned int i = 0; i < v->neighbor1.size(); i++)
{
City * z = &v->neighbor1[i];
q.push(z);
if(z->visited1 == false)
{
v->neighbor1[i].cityDistance = v->cityDistance + 1;
v->neighbor1[i].previous1.push_back(*v);
v->neighbor1[i].visited1 = true;
}
}
}
q.pop();
}
}
void City::printPath(City final)
{
if(final.previous1.size() != 0)
{
cout << final.previous1[0].cityName << endl;
}
else
{
cout << "No previous for final" << endl;
}
}
이 메인입니다 : 당신은 도시를 복사
#include<iostream>
#include<vector>
#include<queue>
#include<string>
using namespace std;
#include"City.h"
int main()
{
City NewDelhi = City("New Delhi");
City HongKong = City("Hong Kong");
City Washington = City("Washington");
City Dublin = City("Dublin");
City Lisbon = City("Lisbon");
City Vienna = City("Vienna");
City Santiago = City("Santiago");
City RioDeJaneiro = City("RioDeJaneiro");
City Berlin = City("Berlin");
City NewYork = City("NewYork");
vector<City> vector1;
vector1.push_back(HongKong);
vector1.push_back(NewDelhi);
vector1.push_back(Washington);
vector1.push_back(Dublin);
vector1.push_back(Lisbon);
vector1.push_back(Vienna);
vector1.push_back(Santiago);
vector1.push_back(RioDeJaneiro);
vector1.push_back(Berlin);
vector1.push_back(NewYork);
HongKong.neighbor1.push_back(NewDelhi);
NewDelhi.neighbor1.push_back(Washington);
Washington.neighbor1.push_back(Dublin);
Dublin.neighbor1.push_back(Lisbon);
Lisbon.neighbor1.push_back(Vienna);
Vienna.neighbor1.push_back(Santiago);
Santiago.neighbor1.push_back(RioDeJaneiro);
RioDeJaneiro.neighbor1.push_back(Berlin);
Berlin.neighbor1.push_back(NewYork);
NewYork.neighbor1.push_back(HongKong);
NewYork.shortPath(vector1);
HongKong.printPath(NewYork);
system("PAUSE");
return 0;
}
왜 'addNeighbor' 함수를 만들고 주에서 사용하지 않습니까? 이것이 문제인지는 모르겠지만'HongKong.addNeighbor (NewDelhi)' –
과 같이하려고하면 오류를 자세히 기록하고 오류를 복사하십시오. 또한 컴파일러 오류 또는 런타임 오류 – ahmedsafan86