У меня есть программа, которая хранит наборы классов и структур в списках.C++ Указатель по ссылке, списки классов и указателей, wierd return
Это делает следующее:
- Передает входной сигнал (ы
int
), итератор, список и указатель по ссылке в функциюcheck()
- итерации список, пока он не находит соответствие между данные итератора и ввод
- Устанавливает указатель как позицию итератора
- Возвращает true или false, в зависимости от того, было найдено совпадение или нет.
Моя проблема, когда я вызываю функцию display()
внутри проверки функции, будь то из it->display()
или Ptr->display()
, он отлично работает. Но когда он передается по ссылке, и я пытаюсь его отобразить. Он печатает мусор.
//it is the iterator, l is the list, Ptr is the passed pointer
template<class T, class T2, class P>
bool Inspection::check(int input, T it, T2 l, P * &Ptr)
{
for(it = l.begin(); it != l.end(); ++it){ //Iterates through list using iterator
if (it->checkExists(input)){ //if input == iterator class's data
Ptr = &*it;
//Display data - ERROR CHECKING//
it->display();
Ptr->display();
return true;
}
}
return false;
}
checkExists
является функцией, которая сравнивается с частными данными в классе это перебирает, Такие, как
bool Property::checkExists(int input)
{
if (input == ID)
return true;
return false;
}
display
также прост
void Property::display()
{
//Prints out property info
cout << ID << ";" << address << ";" << landTypes[type] << ";" << price << endl;
}
Стандартный вызов (p
является список классов Property
, которые я назвал ранее в программе)
int input;
Property * temp; //Pointer to a class temp
list<Property>::iterator pIT;
cin >> input;
while(!check(input, pIT, p, temp)){
...
}
temp->display();
Типичный выход будет (первые два являются вызовами внутри функции и правильными, третий - вызовом temp->display();
извне функции.
1001;5/10 Northfields Ave, North Wollongong, NSW 2500;Townhouse;280000
1001;5/10 Northfields Ave, North Wollongong, NSW 2500;Townhouse;280000
13;�������\314���@�ve, North Wollongong, NSW 2500;Townhouse;280000
EDIT: Извините, я связал неправильную функцию отображения(). Отредактированный код для обновления
Куда он обращается по ссылке? – 0x499602D2
bool Inspection :: check (int input, T it, T2 l, P * & Ptr) В первом кодовом блоке, где Ptr вводится в функцию, и обратно обратно –
И что такое 'p', который вы передали к вызову функции? – 0x499602D2