开发者

C++ Help with pointers for a student

开发者 https://www.devze.com 2023-02-13 11:20 出处:网络
I am trying to create a vector and pass it to a function allowing the vector to be modified. Here is an abridged version of my code that doesn\'t work.

I am trying to create a vector and pass it to a function allowing the vector to be modified. Here is an abridged version of my code that doesn't work.

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")); 
}

This code is compiling with errors. I 开发者_StackOverflowthink I'm not passing the pointer correctly but I'm not sure.


You've promised to give addStudent a pointer to a vector:

void addStudent(vector<Student*> *students)

so, use the address-of operator to get a pointer:

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

There's nothing here that actually needs dynamic allocation, but if you did, note that new also returns a pointer:

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

Another option is to pass by reference:

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

But I prefer the pointer, when the function is going to change its parameter.


Your problem is here:

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

students is declared as a value type but you're assigning it a pointer.

In the future you should include the compiler error in your question.


You probably come from a Java background... so you'll have to learn to live without new for a while :)

In C++ there are 2 ways to create objects:

  • objects with automatic storage duration (created on the stack)
  • objects with dynamic storage duration (created on the heap)

new creates objects of the second kind, for which YOU must ensure proper disposal (by calling delete according to text books, but... we'll stay away from this for now).

Here, you don't need new:

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

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

As for the function, you have several possibilities:

  • make it return the object
  • pass the object by reference void addStudent(std::vector<Student>& students);
  • pass by pointer, but then use the address of operator to get to it addStudent(&students);

You don't have to use pointers everywhere in C++... in fact, it's probably better you don't, to begin with.

Oh, and you definitely need a good tutorial, that's basic stuff, and you can't get into C++ without the boring basics... sorry :/

0

精彩评论

暂无评论...
验证码 换一张
取 消