Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

C++ pass a function in a class by reference

I'm trying to pass a reference to a function in a class but am having trouble figuring out how to do it. So say I have a class test defined as such

#include <iostream>

class test {
public:
  test () {};
  ~test () {};

  void setA (int);
  int getA (void);

private:
  int a;

};

void test::setA (int A) { a = A; }

int test::getA (void) { return a; }

using namespace std;

int main ()
{
  test T;
  T.setA(5);

  cout << "a = " << T.getA() << endl;

  return 0;
}

That works fine but if I want to pass the values by reference

#include <iostream>

class test {
public:
  test () {};
  ~test () {};

  void setA (int);
  int & getA (void);

private:
  int a;

};

void test::setA (int & A) { a = A; }

int & test::getA (void) { return a; }

using namespace std;

int main ()
{
  test T;
  T.setA(5);

  cout << "a = " << T.getA() << endl;

  return 0;
}

I cannot figure out how to configure setA to pass by reference.

like image 334
user1543042 Avatar asked Aug 01 '26 09:08

user1543042


1 Answers

There are two issues with the code. First, the definition of setA does not match the declaration. You must make the declaration take in a reference as a parameter.

Change this:

void setA (int);

To this:

void setA (int&);

The second issue is that you are trying to pass an r-value (5) as a reference. You must pass in an l-value. You can do that by creating an int first and then passing that by reference:

int i = 5;
T.setA(i);

Full example:

#include <iostream>

class test {
public:
  test () {};
  ~test () {};

  void setA (int&);
  int & getA (void);

private:
  int a;

};

void test::setA (int & A) { a = A; }

int & test::getA (void) { return a; }

using namespace std;

int main ()
{
  test T;

  int i = 5;


  T.setA(i);

  cout << "a = " << T.getA() << endl;

  return 0;
}

When you pass something by reference to a function in C++, the function does not keep the parameter in memory automatically. Thus, you have to declare it before so that it stays in memory throughout the entire function.

The 5 you tried to pass as a reference would go out of scope and get destroyed as soon as the function starts. The declared i variable is instead destroyed at the end of the main function.

like image 151
Jack Liu Avatar answered Aug 03 '26 21:08

Jack Liu



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!