【问题标题】:Vector C++ with your own Class带有您自己的类的矢量 C++
【发布时间】:2011-08-04 03:25:16
【问题描述】:

我尝试在 google 中搜索,但它只显示了我不想要的内容。

我有一个名为 Student 的类,在我的主类中我将它实例化为一个向量。

我尝试在我的主类中添加这一行

vector<Student> students;
students[0].setFirstName("Test");

它会在我的学生课程中引发错误

void Student::setFirstName(string fname) { firstName = fname; }

上面写着 EXC_BAD_ACCESS。我在 Macintosh 中使用 Xcode

编辑:我希望它是动态的,这就是我没有指定大小的原因。

【问题讨论】:

    标签: c++ macos xcode4


    【解决方案1】:

    我相信您知道,表达式students[0] 表示您正在尝试访问vector 中的第一项。但是为了访问第一个项目,你必须先添加第一个项目。

    很简单,在尝试使用向量中的任何内容之前添加对vector::push_back 的调用。或者,通过

    声明向量
    vector<Student> students(/*number of default Students here*/);
    

    还有其他方法,但只要确保你有你想要使用的东西。

    具体来说,您传递给[] 操作的索引必须满足条件0 &lt;= index &amp;&amp; index &lt; students.size()。在你的情况下,students.size() == 0,所以0 &lt;= index &amp;&amp; index &lt; 0,这显然是不可能满足的。

    【讨论】:

    • 0 不必小于index
    • @Seth:谢谢,改成小于等于。
    【解决方案2】:

    当您创建矢量时,其中有多少元素?没有任何。然而你试图立即访问一个元素。您需要先将元素放入其中。在初始化时,像这样:

    vector<Student> students(10);
    

    或者其他一些方法,比如push_back,或者resize

    【讨论】:

    • @Seth:不确定“10 个空的”是否是最好的表达方式。该向量内将有 10 个完整的 Student 实例。
    • @lnluis:然后有一些相关的代码你没有向我们展示。给出一个导致错误的完整最小示例。
    • 代码student[i].setFirstName 从不向向量添加任何内容。就像您提到的数组一样,您无法访问末尾的元素,因为它们不存在!您必须使用push_back 或其他插入方法添加到向量中。
    • 加上一个数组,它还将拥有 30 个完整的 Student 实例。有了你永远不能再添加的限制。试试这样的代码:vector&lt;Student&gt; students(10); Student student; for(int i = 0; i &lt; 20; ++i) students.push_back(student); 在这个 sn-p 中,你从向量中只有 10 个 Student 对象开始,但在循环之后你现在向量中有 30 个 Student,因为你调用了 push_back 20次。我认为您需要了解一下向量的工作原理。
    • @Inluis,写一个接受参数的显式构造函数,然后使用它。
    【解决方案3】:

    您的vector 为空,但您尝试访问其第一个元素。在访问其内容之前尝试在vector 中添加一些内容。

    【讨论】:

      【解决方案4】:

      您超出了vector 大小的范围。您正在尝试访问不存在的元素。您可以在初始化时声明其大小。

      vector<Student> students(SIZE);
      

      附带说明,setter 方法通常采用 const 引用:

      void Student::setFirstName(const string &fname) { firstName = fname; } 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-05-14
        • 1970-01-01
        相关资源
        最近更新 更多