«Нет подходящей функции для ошибки вызова» при вызове конструктора из вспомогательной функции в g ++ - PullRequest
0 голосов
/ 13 марта 2011

У меня есть конструктор

A::A(const Name& n,const IRole& r)
: ...
{ }

И вспомогательная функция, которая использует конструктор

AP<A> A::Create(const Name& n, const IRole& r)
{
    return new A(n,r);
}

И g ++ выдает мне сообщения об ошибках при компиляции этого кода.

error: no matching function for call to ‘AIR::AP<AIR::A>::AP(AIR::AP<AIR::A>)’
 note: candidates are:   AIR::AP<T>::AP(AIR::AP<U>&) [with U = AIR::A, T = AIR::A]
 note:                   AIR::AP<T>::AP(AIR::AP<T>&) [with T = AIR::A]
 note:                   AIR::AP<T>::AP(T*) [with T = AIR::A]
error:   initializing temporary from result of ‘AIR::AP<T>::AP(T*) [with T = AIR::A]’

Что не так с этим кодом?

ДОБАВЛЕНО

AP<A> A::Create(const Name& n, const IRole& r)
{
    AP<A> port(new A(n,r));
    return port; 
}

Кажется, чтобы решить эту проблему.

1 Ответ

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

Вы не показываете вызов Create; это пытается скопировать результат вызова в новую переменную? Обратите внимание, что только неконстантные AP<T> объекты могут быть скопированы, и поэтому временные файлы (которые не могут связываться с неконстантными ссылками) не могут быть скопированы с вашими текущими определениями.

...