我正在尝试创建一个向量并将其传递给一个允许修改向量的函数。这是我的代码的删节版本,不起作用。
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"));
}
此代码正在编译时出错。我想我没有正确地传递指针,但我不确定。
答案 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 ++ ...对不起:/