如何从Flight中检索一个对象以与主要的输入(flightNumber)进行比较?如何在main中声明属性类型?
编译时,会显示一条错误消息:invalid conversion of 'int' to '*Flight*'
agent1.delete(flightNumber);
。
class Flight
{
int FlightNumber
};
class TravelAgent
{
vector <Flight *> flightList;
};
void Agent::delete(Flight *obj)
{
vector<Flight*>::iterator ptr;
for(ptr=flightList.begin();ptr!=flightList.end();ptr++)
{
if((*Ptr)==obj)
{
flightList.erase(ptr);
break;
}
}
if ((ptr) == flightList.end())
{
cout<<"Flight not found"<<endl;
}
}
int main
{
Agent agent1;
int flightNumber;
cout<<"Enter the number of the flight: "<<flush;
in>>flightNumber;
agent1.delete(flightNumber);
}
答案 0 :(得分:1)
您可以在Flight类
中添加(如果不存在)getterclass Flight{
int FlightNumber;
public:
int getflightNumber(){ return flightNumber;}
};
并按以下步骤操作: -
void Agent::delete(int flightNumber)
{
vector<Flight*>::iterator ptr;
for(ptr=flightList.begin();ptr!=flightList.end();ptr++)
{
if(((*Ptr)->getflightNumber() == flightNumber)
{
flightList.erase(ptr);
break;
}
}
if ((fPtr) == listFlight.end())
{
cout<<"Flight not found"<<endl;
}
}
答案 1 :(得分:1)
由于此处的代码不能完全发挥作用,因此很难给出好的建议。
首先,您的错误发生是因为您使用void Agent::delete(Flight *obj)
类型的变量而不是类型int
调用(似乎是)成员函数Flight
。编译器无法将Flight
对象解释为int
,因此会抛出错误。
其次,您想知道如何从对象中检索属性。我会建议您查看访问者和 mutators 。
如果要检索Flight
对象中的信息保留,则应该公开允许的成员函数。
// in your header file
class Flight
{
private:
int flight_number;
public:
// retrieve flight number value
int get_flight_number(void) const;
// allow to set the flight number value
void set_flight_number(int new_flight_number);
// some other member functions
}
// in your source file
int Flight::get_flight_number(void) const
{
return this->flight_number;
}
void Flight::set_flight_number(int new_flight_number)
{
// let's do some verification (do whatever you want)
if (new_flight_number > 0)
{
this->flight_number = new_flight_number;
}
}
通过这种方式,您可以通过编写来设置和访问flight_number
,例如:
void test_function(Flight *f)
{
if (f->get_flight_number() == 42)
{
// do some stuff
}
}
int main()
{
Flight *my_f = new Flight();
my_f->set_flight_number = 4242;
my_test_function(my_f);
}
现在,您有足够的信息可以开始。
注意:
你大量使用指针。现代C ++强烈倾向于不!尝试使用引用或移动操作。您可以参考此页面获取信息:
虽然这对初学者来说有点硬核。网上到处都是精彩的文章。关于它
答案 2 :(得分:0)
您的主要方法中存在原始错误。您需要对其进行更改,以便创建delete
类的实例,而不是将航班号传递到Flight
方法。
int main() { // you are also missing parenthesis
Agent agent1;
int flightNumber;
cout<<"Enter the number of the flight: "<<flush; // I don't know what flush is but maybe you meant std::endl
cin>>flightNumber;
Flight flight(flightNumber);
agent1.delete(&flight); // delete takes a Flight* not an int
}
这要求您的Flight类具有适当的构造函数。
class Flight
{
public:
Flight(int flightNumber)
: flightNumber_(flightNumber)
{}
private:
int flightNumber_;
};
然后在您的delete
方法中,在向量中搜索Flight
实例,该实例与您要从向量中移除的flightNumber_
具有相同的Flight
。这将要求您的Flight
课程有一些方法可以返回flightNumber_
成员变量。
这绝对不是最好的方法,并且远不符合现代C ++标准,但它应该让你去。