Предположим, у меня есть два несвязанных класса A
и B
. У меня также есть класс Bla
, который использует boost :: shared_ptr
следующим образом:
class Bla {
public:
void foo(boost::shared_ptr);
void foo(boost::shared_ptr);
}
Обратите внимание на const . Это важная часть, которой не хватало в исходной версии этого вопроса. Она компилируется, и следующий код работает:
Bla bla;
boost::shared_ptr a;
bla.foo(a);
Однако, если я переключаюсь с использования boost :: shared_ptr
на использование std :: shared_ptr
в приведенных выше примерах, я получаю сообщение об ошибке компиляции:
"error: call of overloaded 'foo(std::shared_ptr)' is ambiguous
note: candidates are: void foo(std::shared_ptr)
void foo(std::shared_ptr)
Можете ли вы помочь мне понять, почему компилятор не может определить, какую функцию использовать в случае std :: shared_ptr, а может в случае boost :: shared_ptr? Я использую версии GCC и Boost по умолчанию из Ubuntu 11.04 репозиторий пакетов, которые в настоящее время являются GCC 4.5.2 и Boost 1.42.0.
Вот полный код, который вы можете попробовать скомпилировать:
#include
using boost::shared_ptr;
// #include
// using std::shared_ptr;
class A {};
class B {};
class Bla {
public:
void foo(shared_ptr) {}
void foo(shared_ptr) {}
};
int main() {
Bla bla;
shared_ptr a;
bla.foo(a);
return 0;
}
Между прочим, эта проблема побудила меня задать этот вопрос о том, нужно ли мне вообще использовать std :: shared_ptr
; -)