gpt4 book ai didi

c++ - 如何访问单独类中的私有(private)构造函数?

转载 作者:可可西里 更新时间:2023-11-01 17:56:10 26 4
gpt4 key购买 nike

我正在用 C++ 编写一个库。我的图书馆有两个类(class),AB .我想隐藏 A()引用我的库的任何代码的构造函数。我也要上课B能够调用A()构造函数。

我有 C# 背景,对我的 C++ 内存犹新。在 C# 中,我将简单地声明 A()构造函数为 internal .我读过在 C++ 中执行此操作的最接近方法是 friend 的组合声明和前向声明。我该怎么做呢?下面是我的三个文件:

嗯:

#pragma once
class A
{
private:
A();
};

B.h

#pragma once
class A;
class B
{
public:
A createA();
};

B.cpp:

#include "A.h"
#include "B.h"

A B::createA()
{
A result; //cannot access private member declare in class 'A'
return result;
}

我试过将它添加到 A.h 中:

public: friend A createA();

我尝试将其添加到 A.h 中并带有相应的前向声明:

public: friend A B::createA();

我改为尝试添加和 extern class B;到 A.h 并使 B 成为这样的类:

public: friend class B;

我很茫然。

我认为如果我有 B::createA() 这可能会更容易函数返回指向 A 的指针对象而不是 A直接反对,但这对我来说是行不通的。我正在模拟一个封闭的 API,API 调用返回一个 A对象而不是指针。

最佳答案

您可能只需要删除第三次尝试中的“extern”,即可将其转变为正确的前向声明。尝试:

嗯:

#pragma once
class B;
class A
{
friend class B;
private:
A();
};

关于c++ - 如何访问单独类中的私有(private)构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18704628/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com