# question about references and my broken method

I have the following method which doesn’t work:

``````
vector<ofxDTangibleBase> closest2 (vector<ofxDTangibleBase> &listA, vector<ofxDTangibleBase> &listB) {

vector<ofxDTangibleBase&> returnList;

float closestDistance = FLT_MAX;
ofxDTangibleBase* closestA;
ofxDTangibleBase* closestB;

for (ofxDTangibleBase &a : listA) {
for (ofxDTangibleBase &b : listB) {
float d = distSquared(a, b);

if ( d == 0) {
// should i use & since it's allready a reference
returnList.push_back(&a);
returnList.push_back(&b);
return returnList;
}

if (d < closestDistance) {
closestDistance = d;
closestA = &a;
closestB = &b;
}

}
}

returnList.push_back(&closestA);
returnList.push_back(&closestB);

return returnList;

}

``````

I was wondering a few things:

Is there a difference in:

``````
vector<ofxDTangibleBase> closest2 (vector<ofxDTangibleBase> &listA, vector<ofxDTangibleBase> &listB) {

``````

and

``````
vector<ofxDTangibleBase> closest2 (vector<ofxDTangibleBase&> &listA, vector<ofxDTangibleBase&> &listB) {

``````

Since the vector is allready past by reference. And if there is no difference, which one should i choose.

If i remove the & in the following line, will it then make a copy when i push_back things into an vector?

``````
vector<ofxDTangibleBase&> returnList;

``````

I can’t compile of my method, i get a lot of errors like:
’Pointer’ declared as a pointer to a reference of type 'ofxDTangibelBase &'
Can someone help?

the & has 2 different meanings depending where you use it:

in declarations:

• in a parameter it means that when you call that method/function the object you pass won’t be copied and instead inside the method you’ll get a reference

• in the declaration of a variable it means that you make that variable a reference to the original variable like:

``````

vector<ofxDTangibleBase> returnList;
...
ofxDTangibleBase & base = returnList[0];

``````

base is a reference to the object in position 0.

but references have to be initialized in the declaration so you can’t use a vector of references like:

``````

vector<ofxDTangibleBase&> v;

``````

cause the vector will try to create a reference without a value which is illegal

the other meaning is when you use it before a variable like:

``````

int a = 5;
int * b = &a;

``````

in that case the & means give me the memory address (a pointer) of a. in this case it’s not a reference anymore but a pointer

in your code the problem is that this:

``````

vector<ofxDTangibleBase&> returnList;

``````

is illegal, you can do:

``````

vector<ofxDTangibleBase> returnList;
...

returnList.push_back(a);
returnList.push_back(b);

``````

and that will create a copy of each object, if you want to return references to the originals you need to create a vector of pointers instead like:

``````

vector<ofxDTangibleBase*> returnList;
...

returnList.push_back(&a);
returnList.push_back(&b);

``````

and then of course the return type of the method also has to be a vector of pointers

thanks as always, that really helped.

One more.
I have a pointer named b.
And a method that needs a reference.
Now i always use 2 lines, first make a reference, then pass it.

``````
ofxDTangibleBase &rB = *b;
a->setValues(rB);

``````

Can that be done in one line?

If i try this for example (i know it looks stupid, but makes the most sense to me):

``````
a->setValues(&*b);

``````

Then i get:
Non-const lvalue reference of type ‘ofxDTangibleBase’ cannot be bind to a temporary of type 'ofxDTangibleBase *'

I have that error a lot of times, and i always manage to get around it with how i do it above.
I looked up questions at stackoverflow but i have problems understanding.

Also why is there a l in lvalue?

![](http://forum.openframeworks.cc/uploads/default/3083/Screen Shot 2013-11-03 at 10.45.24 PM.png)

it’s the same as before the & in this case tries to get the memory address so &*b is the same as doing nothing, you just need to do:

``````

a->setValues(*b);

``````