【问题标题】:C++, Objects on vectorC++,向量上的对象
【发布时间】:2014-02-11 04:28:38
【问题描述】:

我想将对象存储在向量上。但我不知道为什么它不起作用。

‪#‎include‬ <iostream>
#include <vector>
using namespace std;

我在 Persona.h 文件中有一个 Persona 类。它只有两种方法: 默认构造函数和名为 mensaje() 的方法都是公共的,并且没有任何私有成员。

#include "Persona.h"

int main()
{
    vector<Persona> personas;
    Persona persona1;
    Persona persona2;

    personas.push_back(persona1);
    personas.push_back(persona2);

    vector<Persona>::const_iterator p;

    for(p = personas.begin(); p <= personas.end(); p++) {

这是我收到错误消息的地方

        p.mensaje();
    }
}

我认为问题在于我试图调用“p”的方式。 我尝试使用 const_iterator 而不是任何其他类型对吗?

【问题讨论】:

  • p &lt;= personas.end() 应该是 &lt;。 p 也是一个迭代器,所以你应该在迭代器上使用 -&gt;,而不是 . 来访问类的成员。
  • 你看过关于如何使用迭代器的任何参考资料吗?
  • @user3286380,应该是!=,真的。

标签: c++ vector iterator constants


【解决方案1】:

p 是迭代器而不是对象本身,您需要取消引用它:

(*p).mensaje();

或

p->mensaje();

还有

更新:

for(p = personas.begin(); p <= personas.end(); p++) {

到:

for(p = personas.begin(); p != personas.end(); p++) {
                          ^^^^^^

【讨论】:

  • 我不工作.____。 mensaje 方法是这样的: void Persona::mensaje() { cout
  • @user3053929 你需要将函数设为常量。
【解决方案2】:

您正试图在 const 对象(由 const 迭代器引用的对象)上调用非 const 方法。由于mensaje()方法没有修改对象,所以应该声明为const,像这样:

void Persona::mensaje() const;

进行此更改后,您应该能够调用从 const 迭代器返回的 const 对象(引用)的方法。

(...除了其他答案中提到的其他语法错误。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-01
    • 2011-02-11
    • 1970-01-01
    • 2021-08-09
    • 1970-01-01
    • 2022-11-17
    • 1970-01-01
    相关资源
    最近更新 更多