use*_*861 8 c++ internal friend forward-declaration
我正在用C++编写一个库.我的图书馆里有两门课,A而且B.我想隐藏A()任何引用我的库的代码中的构造函数.我也希望类B能够调用A()构造函数.
我来自C#背景,并且很少记住我的C++.在C#中,我只是将A()构造函数声明为internal.我已经读过,在C++中最接近的方法是friend声明和前向声明的组合.我该怎么做呢?以下是我的三个文件:
啊:
#pragma once
class A
{
private:
A();
};
Run Code Online (Sandbox Code Playgroud)
BH
#pragma once
class A;
class B
{
public:
A createA();
};
Run Code Online (Sandbox Code Playgroud)
B.cpp:
#include "A.h"
#include "B.h"
A B::createA()
{
A result; //cannot access private member declare in class 'A'
return result;
}
Run Code Online (Sandbox Code Playgroud)
我试过把它添加到啊:
public: friend A createA();
Run Code Online (Sandbox Code Playgroud)
我反而尝试将此添加到Ah并带有相应的前向声明:
public: friend A B::createA();
Run Code Online (Sandbox Code Playgroud)
我反而尝试添加和extern class B;Ah并使B成为这样的类:
public: friend class B;
Run Code Online (Sandbox Code Playgroud)
我不知所措.
我认为如果我让B::createA()函数返回指向A对象而不是A直接对象的指针,这可能会更容易,但在我的情况下这不会做.我正在模拟一个封闭的API,API调用返回一个A对象而不是一个指针.
您可能只需要从第三次尝试中删除“extern”即可将其转换为适当的前向声明。尝试:
啊:
#pragma once
class B;
class A
{
friend class B;
private:
A();
};
Run Code Online (Sandbox Code Playgroud)