C ++从类的向量的指针访问类的成员

时间:2010-09-03 18:24:29

标签: c++ function vector

很抱歉,这真让我感到困惑,我知道答案是盯着我看,我无法理解。有人可以看看吗?它用于航空公司预订系统学校项目。

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

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我也希望这个格式正确。

5 个答案:

答案 0 :(得分:5)

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

你应该做的是:

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

答案 1 :(得分:3)

如果v是指向向量的指针,则表达式v[n]表示向量数组v中的第n个向量。您想要的是(*v)[n]

答案 2 :(得分:2)

  

我的问题是,当我尝试比较航班号已经在向量中的航班与我想要添加的航班号。在第7行,我不断收到此消息:

您应该切换到setmap等已排序的容器。这将自动处理。

答案 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()实际上会有效。