Передача не-ссылки в качестве ссылки, без временной переменной - PullRequest
3 голосов
/ 15 марта 2011

Я пытаюсь сделать следующее: вызвать функцию, которая принимает ссылки в качестве параметров, не передавая «переменные», только значения. Разве мой компилятор (gcc) не должен создавать временные "переменные" для отправки? Казалось бы, mvc делает это, так или иначе (другой человек в проекте использует это).

У меня есть:

foo(Vector&,Vector&)

Всякий раз, когда я пытаюсь позвонить foo(Vector(1,2,3),Vector(4,5,6)), я получаю no matching function for call to foo(Vector,Vector); note: candidates are foo(Vector&,Vector&)

Что мне делать? Почему это не работает? Есть ли какая-то концепция, которую я не понимаю?

Спасибо.

Ответы [ 3 ]

4 голосов
/ 15 марта 2011

Vector(1,2,3) создает временное, и временное не может быть привязано к неконстантной ссылке!

Поэтому задайте параметры const как:

void foo(const Vector&, const Vector&)

Теперь это будет работать!

3 голосов
/ 15 марта 2011

Вам необходимо передать как константную ссылку:

foo(const Vector&,const Vector&)

неконстантные ссылки могут быть связаны только с l-значениями, временные не являются l-значениями.

1 голос
/ 15 марта 2011

Используйте const ссылки, если вы хотите передать временные переменные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...