2010-09-03 93 views
1

对不起,但这真是令我困惑,我知道答案是盯着我的脸,我无法弄清楚。有人可以看看吗?它的航空预订系统学校项目。C++从类的向量的指针访问类的成员

此功能包含航班号,容量, 航班数的计数以及包含所有航班的航班作为参数。 它将检查以确保航班不存在,如果它存在错误 消息将被显示,如果不是将创建航班。 航班数量的计数也会增加。

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行我不断收到此消息:

error: ‘class std::vector<Flight, std::allocator<Flight> >’ has no member named ‘getNumber’

在考虑中的载体是与具有名为getNumber()成员Flight类的载体。我通过引用将向量传递给函数。所以v是一个指针,但我认为[]会照顾到这一点。我也尝试使用 - >运算符而不是点运算符,但它没有帮助。我在亏本,任何帮助,将不胜感激。我相对生疏,夏天刚刚完成:D我也希望这是格式正确。

回答

5

参数v作为向量的指针传递给您的函数。如果你使用[]运算符,它就像在C中一样认为v是一个指向矢量数组的指针,所以v [i]实际上仍然是一个向量。

你应该做的是这样的:

(*v)[i].getNumber(); 
+0

非常感谢!我很欣赏所有的快速答案。还有一件事,当我用这种方式内联比较函数时,编译器给了我这个错误: 错误:在'Flight :: getNumber()()== 0'中没有匹配'operator ==' 因此,无论如何要写入所有内联而不会重载==运算符?这只是出于好奇,我只是最终将代码的输出保存到临时字符串变量,然后在比较函数中使用它。再次感谢! – Ben 2010-09-03 18:59:31

+0

getNumber返回的类型是什么?如果这不是本地类型(如int),则必须定义运算符==来告诉编译器如何比较两个非本机类型。如果你在头文件中实现了operator ==,编译器可能会为你内联(如果operator ==的实现不是太大)。 – Patrick 2010-09-03 22:12:24

3

如果v是指向矢量的指针,则表达式v[n]意味着矢量阵列中的第n个矢量v。您要的是(*v)[n]

2

My problem is that when I try to compare the flight number the flights already in the vector with the one I am trying to add. On line 7 I keep getting this message:

你或许应该切换到一个排序容器像setmap。这是自动处理的。

0

看起来像一个小括号问题。

尝试改变这一点:

if (f.compare((v[i].getNumber()) == 0)) 

if (f.compare((v[i].getNumber())) == 0) 
0

一些其他的答案已经钉问题:v是一个指针,所以你必须使用稍有不同的语法得到你想要的。我会建议,如果这样一个向量必须总是传递给这个函数(在其他世界,你永远不会传递NULL),那么你应该通过引用而不是通过指针传递。在这种情况下,你的函数将花费vector<Flight> &v,这将允许你使用矢量而不用额外的指针语法麻烦。 v[i].getNumber()实际上会工作。

相关问题