英文:
C++ how do define friend function in another namespace
问题
我有一个类声明类似于这样;
#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);
}
以及 .cpp 文件
//other.cpp
#include "other.h"
Data someNamespace::function(A* elem){
// 在这里做一些事情
}
我无法弄清楚如何使命名空间函数成为第一个类的友元。命名空间中的函数无法访问类A的私有变量。我漏掉了什么?
英文:
I have a class declaration similar to this;
#include "other.h"
class A{
public:
A(){};
private:
friend Data someNamespace::function(A* elem);
}
Now in another header file i have
//other.h
#include "A.h"
namespace someNamespace {
Data function(A* elem);
}
ANd .cpp file
//other.cpp
#include "other.h"
Data someNamespace::function(A* elem){
// do something here
}
I cant figure out how to make the namespace function as a friend to the first class. function in namespace cannot acces private vairables of class A. What am i missing?
答案1
得分: 1
这是一种方法。前向声明class A
,以便您可以在命名空间中声明Data function(A* elem)
,以便您可以在类A
内部命名someNamespace::function
。
struct Data {};
class A; // <-- *** 您需要这个 ***
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" // 用于定义`Data`
class A; // 这样`A*`才有意义
namespace someNamespace {
Data function(A* elem);
}
#include "A.h" // 如果需要`A`的其余定义。
// 遵循“使用时包含”的原则。
// 在此处添加其余的“other”声明
英文:
Here's one way. Forward declare class A
so that you can declare Data function(A* elem)
in your namespace so that you can name someNamespace::function
within the class A
.
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();
}
If this were multiple files
If the code appears in separate files, then one could imagine an other.h file looking like this:
#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
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论