很抱歉,这真让我感到困惑,我知道答案是盯着我看,我无法理解。有人可以看看吗?它用于航空公司预订系统学校项目。
此功能包含航班号,容量,号码数 航班,以及包含所有航班作为参数的向量。 如果存在错误,它将检查以确保航班不存在 将显示消息,否则将创建航班。伯爵的数量 航班数量也将增加。
void newFlight( string f, string s, int* n, vector<Flight> *v)
{
Flight temp;
//Check to see if flight number exists
bool alreadyExist = false;
for (int i=0; i < v->size(); i++)
{
if (f.compare((v[i].getNumber()) == 0))
alreadyExist = true;
}
//If it doesn't exist, create it
if (!alreadyExist)
{
v->push_back (temp); //Add the new Flight object to the
//vector of flights
*n++; //Increase count
}
else
{
cout << "A flight numbered " << f << " already exists";
cout << ". Flight not created.\n";
}
};
我的问题是,当我尝试比较航班号已经在向量中的航班与我想要添加的航班号。在第7行,我不断收到此消息:
错误:
‘class std::vector<Flight, std::allocator<Flight> >’
没有名为'getNumber'的成员
有问题的向量是一个带有Flight类的向量,它有一个名为getNumber()的成员。我通过引用将向量传递给函数。所以v是指针,但我认为[]会照顾它。我也试过使用 - &gt;运算符而不是点运算符,但它没有帮助。我不知所措,任何帮助将不胜感激。我相对生锈,夏天刚刚结束:D我也希望这个格式正确。
答案 0 :(得分:5)
参数v作为指向vector的指针传递给函数。如果你然后使用[]运算符,它就像在C中一样认为v是指向向量数组的指针,所以v [i]实际上仍然是一个向量。
你应该做的是:
(*v)[i].getNumber();
答案 1 :(得分:3)
如果v是指向向量的指针,则表达式v[n]
表示向量数组v中的第n个向量。您想要的是(*v)[n]
。
答案 2 :(得分:2)
我的问题是,当我尝试比较航班号已经在向量中的航班与我想要添加的航班号。在第7行,我不断收到此消息:
您应该切换到set
或map
等已排序的容器。这将自动处理。
答案 3 :(得分:0)
看起来像是一个小括号问题。
尝试更改此内容:
if (f.compare((v[i].getNumber()) == 0))
到
if (f.compare((v[i].getNumber())) == 0)
答案 4 :(得分:0)
其他一些答案已经解决了这个问题:v是一个指针,所以你必须使用一些不同的语法来获得你想要的东西。
我建议如果这样的向量必须总是传递给这个函数(在其他世界中,你永远不会传递NULL),那么你应该通过引用而不是通过指针传递。在这种情况下,您的函数将使用vector<Flight> &v
,这将允许您使用向量而无需额外的指针语法麻烦。 v[i].getNumber()
实际上会有效。