我有一个程序,它在列表中存储类和结构集。
它执行以下操作:
int
),迭代器,列表和指针传递给函数check()
我的问题是,当我在功能检查中调用函数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
编辑:对不起,我链接了错误的显示功能()。编辑过的代码
答案 0 :(得分:2)
不考虑WhozCraig指出的设计问题,在您提供的代码中打印垃圾的问题如下:
template<class T, class T2, class P>
bool Inspection::check(int input, T it, T2 l, P * &Ptr)
^^^^
您正在通过值而不是引用传递l
,因此您将返回指向临时变量的指针,当您在方法之外取消引用它时,该临时变量将不存在。如果你修改代码如下,它应该开始为这个特定的问题工作,虽然它确实需要重新设计:
template<class T, class T2, class P>
bool Inspection::check(int input, T it, T2 &l, P * &Ptr)