Почему gcc не скомпилирует объявление класса в качестве ссылочного аргумента? - PullRequest
2 голосов
/ 27 марта 2010

Это прекрасно компилируется в Visual studio, но почему не в XCode?

class A()
{};

someMethod(A& a);

someMethod(A()); //error: no matching function call in XCode only :(  

Это плохая форма? каждый раз приходится писать следующее:

A a;
someMethod(a);  //successful compile on Xcode

Я что-то упустил? Я не очень опытный, поэтому спасибо за любую помощь!

Ответы [ 2 ]

4 голосов
/ 27 марта 2010

Вы не можете привязать временную ссылку к неконстантной ссылке. Это сработало бы, если бы вы изменили функцию для получения константной ссылки:

someMethod(const A& a);

Кроме того,

A a();

не объявляет локальную переменную. Он объявляет функцию с именем a, которая не принимает параметров и возвращает объект типа A. Вы имеете в виду:

A a;
0 голосов
/ 27 марта 2010

Для передачи ссылок на rvalue (из которых ссылка получается неявно), как это делается в someMethod(A()), вам нужно константные ссылки . Действительное объявление (включая правильный синтаксис), следовательно,

void someMethod(const A& a);
...