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

Posted

技术标签:

【中文标题】C++从类的向量指针访问类的成员【英文标题】:C++ Access a member of a class from the pointer of a vector of the class 【发布时间】:2010-09-03 18:24:29 【问题描述】:

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

这个函数接受Flight Number、容量、数量的计数 航班,以及包含所有航班作为参数的向量。 它将检查以确保航班不存在,如果存在则错误 将显示消息,否则将创建航班。计数为 航班数量也将增加。

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&lt;Flight, std::allocator&lt;Flight&gt; &gt;’ 没有名为“getNumber”的成员

所讨论的向量是一个带有名为 getNumber() 的成员的 Flight 类的向量。我通过引用将向量传递给函数。所以 v 是一个指针,但我认为 [] 会处理这个问题。我也尝试使用 -> 运算符而不是点运算符,但它没有帮助。我不知所措,任何帮助将不胜感激。我比较生疏,夏天刚刚结束 :D 我也希望格式正确。

【问题讨论】:

【参考方案1】:

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

你应该这样做:

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

【讨论】:

非常感谢!!!我感谢所有快速的答案。还有一件事,当我以这种方式将它与比较函数内联使用时,编译器给了我这个错误:错误:'Flight::getNumber()() == 0'中的'operator=='不匹配所以有吗无论如何要在不重载 == 运算符的情况下将其全部内联?这只是出于好奇,我只是最终将代码的输出保存到一个临时字符串变量,然后在比较函数中使用它。再次感谢! getNumber 返回的类型是什么?如果这不是本机类型(如 int),则必须定义 operator== 以告诉编译器应如何比较两种非本机类型。如果你把 operator== 的实现放在头文件中,编译器可能会为你内联(如果 operator== 的实现不是太大的话)。【参考方案2】:

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

【讨论】:

【参考方案3】:

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

您可能应该切换到像setmap 这样的排序容器。这将被自动处理。

【讨论】:

【参考方案4】:

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

尝试改变这个:

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

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

【讨论】:

【参考方案5】:

其他一些答案已经解决了这个问题:v 是一个指针,所以你必须使用一些不同的语法来得到你想要的。

我建议如果这样的向量必须始终传递给这个函数(在其他世界,你永远不会传递 NULL),那么你应该通过引用而不是指针传递。在这种情况下,您的函数将采用vector&lt;Flight&gt; &amp;v,这将允许您使用向量而无需额外的指针语法麻烦。 v[i].getNumber() 确实有效。

【讨论】:

以上是关于C++从类的向量指针访问类的成员的主要内容,如果未能解决你的问题,请参考以下文章

当有多个派生类时,如何使用基类指针访问派生类的函数成员?

试图通过指针访问嵌套类的成员函数

在 C++ 中将指向基类的指针传递给派生类的成员函数

C++ 类和对象

C++ 类和对象

无法访问类的向量成员