gpt4 book ai didi

c++ - 对象指针的 vector 在 C++ 中似乎没有按预期执行

转载 作者:搜寻专家 更新时间:2023-10-31 00:03:50 25 4
gpt4 key购买 nike

我已经关注了很长时间,但这是我第一次提出问题。简而言之,问题是; vector<Student*> studentvector这是一个对象指针 vector ,似乎将学生信息推回为 student ;但是当我打印以查看 vector 中的第一个是否按预期执行时,我看到它总是用新来的学生信息更新第一条记录,尽管 studentvector.size() 上没有问题。它将记录推回 vector 的次数与我调用 addStudent(...) 的次数一样多。但它用最后一个学生的信息填充所有 vector 。在不使用智能指针或高级东西的情况下,如何在此框架内成功地用正确的信息填充 vector ?

对不起,如果我对我的问题含糊不清。您可能会引导我提供理解问题所必需的内容。提前致谢。

addStudent(const string alias, const string name) throw(StudentException)
{
Student* student = new Student(alias, name)
studentvector.push_back(student);
cout << studentvector.front() << endl;
}

也就是Student的实现;

#include "Student.h"

string *Alias;
string *Name;


Student::Student(string alias)
{
Alias = new string(alias);
}

Student::Student(string alias, string name)
{
Alias = new string(alias);
Name = new string(name);
}

Student::~Student()
{
delete Alias;
delete Name;
}

const string& Student::getAlias() const
{
return *Alias;
}

void Student::setAlias(const string& alias)
{
*Alias = alias;
}

const string& Student::getName() const
{
return *Name;
}

void Student::setName(const string& name)
{
*Name = name;
}

考虑别名不是保留的。

最佳答案

呸!这是您的问题 - 来自类型 Student 的所有对象使用相同的全局指针:

string *Alias;
string *Name;


<p>Make these two as members in you class</p>

<pre><code>
class Student
{
private:
string *Alias;
string *Name;
//..
};
</code></pre>

<hr/>

<p><strong>EDIT</strong>:
Also, I don't think, that it's a good idea to use pointer to <code>std::string</code>, I'd suggest you to use like this:</p>

class Student
{
private:
string Alias;
string Name;
//..
};

关于c++ - 对象指针的 vector 在 C++ 中似乎没有按预期执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5260862/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com