三行代码  ›  专栏  ›  技术社区  ›  Alexander

来自另一命名空间的友元函数

  •  0
  • Alexander  · 技术社区  · 1 周前
    /** module.h */
    #pragma once
    
    class A {
      friend void helpers::logValue(const A &);
      int _val;
    
    public:
      A() {}
    };
    
    namespace helpers {
      static void logValue(const A &a) {
        std::cout << a._val;  // <== ERROR: '_val' is not accessible
      }
    }
    

    如何在另一个命名空间中声明友元函数?

    1 回复  |  直到 1 周前
        1
  •  3
  •   Anoop Rana    1 周前

    解决此问题的一种可能方法如下所示:

    class A;//forward declaration for class A
    namespace helpers{
    static void logValue(const A &a); //declaration
    }
    ///////////////////////////////////////////
    
    class A {
        
      friend void helpers::logValue(const A &);
    
      int _val;
    };
    
    namespace helpers {
      static void logValue(const A &a) {
        std::cout << a._val;  // works now
      }
    }
    

    可以显示上述程序的输出 here