В следующем коде я пытаюсь получить функцию друга для доступа к частному члену класса. В моем понимании я правильно объявить его как функцию друга, но VS2012 дает мне ошибку:Функция друга не работает
error C2248: 'X::S::s_' : cannot access private member declared in class 'X::S'
Может кто-нибудь предложить, что я делаю не так? Это самый простой пример, демонстрирующий ошибку компилятора, с которой я мог бы придумать.
namespace X
{
class S
{
friend std::string r(X::S &s);
std::unique_ptr<std::istream> s_;
};
}
std::string r(X::S &s)
{
auto& x = s.s_;
return "";
}
Как бы я объявить глобальную функцию друга вместо перемещения функции в пространство имен? Если я делаю friend std :: string :: r (S &s);, он говорит, что std :: string не имеет члена 'r'. – Graznarak
@Graznarak, Помимо перемещения класса из пространства имен, я не уверен если вы можете. – chris
@Graznarak: Попробуйте 'friend std :: string (:: r) (S & s);' Но вам понадобится форвардная декларация. –