C++如何在另一个名称空间中定义友元函数

gmxoilav  于 2023-06-25  发布在  其他
关注(0)|答案(1)|浏览(108)

我有一个类声明与此类似;

#include "other.h"
class A{
          public:
            A(){};
          private:
            friend Data someNamespace::function(A* elem);
        }

现在在另一个头文件中我有

//other.h
#include "A.h"
namespace someNamespace {
       Data function(A* elem);
    }

ANd .cpp文件

//other.cpp
#include "other.h"
Data someNamespace::function(A* elem){
  // do something here
}

我不知道如何使名称空间作为第一个类的朋友。名称空间中的函数不能访问类A的私有值。我错过了什么?

zvokhttg

zvokhttg1#

有个办法前向声明class A,这样就可以在命名空间中声明Data function(A* elem),这样就可以在类A中命名someNamespace::function

struct Data {};

class A;  // <-- *** You need this ***

namespace someNamespace {
    Data function(A* elem);
}

class A {
    friend Data someNamespace::function(A* elem);
};

Data someNamespace::function(A* elem) {
  return Data();
}

如果是多个文件

如果代码出现在单独的文件中,那么可以想象一个other.h文件如下所示:

#include "data.h"  // for the definition of `Data`

class A;  // so that `A*` makes sense

namespace someNamespace {
   Data function(A* elem);
}

#include "A.h"  // If the rest of the definition of `A` is needed.
                // "Include what you use" principle.

// remaining "other" declarations here

相关问题