C ++帮助学生指针

时间:2011-02-26 19:28:51

标签: c++ pointers vector

我正在尝试创建一个向量并将其传递给一个允许修改向量的函数。这是我的代码的删节版本,不起作用。

void addStudent(vector<Student*>*);
int main()
{
   vector<Student*> students = new vector<Student*>;
   addStudent(students);
   return(0);
}
void addStudent(vector<Student*> *students)
{
   students->push_back(new Student("bob")); 
}

此代码正在编译时出错。我想我没有正确地传递指针,但我不确定。

3 个答案:

答案 0 :(得分:3)

你已答应给addStudent一个指向矢量的指针:

void addStudent(vector<Student*> *students)

所以,使用address-of运算符来获取指针:

vector<Student*> students;
addStudent(&students);

这里没有什么需要动态分配,但如果你这样做,请注意new也会返回一个指针:

vector<Student*>* students_ptr = new vector<Student*>();
addStudent(students_ptr);

另一种选择是通过引用传递:

void addStudent(vector<Student*>& students)
vector<Student*> students;
addStudent(students);

但是当函数要更改其参数时,我更喜欢指针。

答案 1 :(得分:2)

你的问题在这里:

vector<Student*> students = new vector<Student*>;

students被声明为值类型,但您为其指定了一个指针。

将来你应该在你的问题中包含编译器错误。

答案 2 :(得分:1)

你可能来自Java背景......所以你必须学会​​在没有new的情况下生活一段时间:)

在C ++中,有两种创建对象的方法:

  • 具有自动存储持续时间的对象(在堆栈上创建)
  • 具有动态存储持续时间的对象(在堆上创建)

new会创建第二种对象,您必须确保妥善处置(根据教科书调用delete,但......我们暂时不会这样做)。

在这里,您不需要new

std::vector<Student> students; // create an empty `vector` of `Student` objects

students.push_back(Student("bob")); // push a new Student in the vector

至于功能,你有几种可能性:

  • 让它返回对象
  • 通过引用void addStudent(std::vector<Student>& students);
  • 传递对象
  • 通过指针传递,但然后使用运算符的地址到达addStudent(&students);

你不必在C ++中到处使用指针......事实上,你可能最好不要使用指针。

哦,你肯定需要一个很好的教程,这是基本的东西,如果没有枯燥的基础知识你就无法进入C ++ ...对不起:/