gpt4 book ai didi

c++ - 在 A 类中创建一个类型为 B 类的 vector - 问题访问数据 [C++] [成员在两个类中都是私有(private)的]

转载 作者:行者123 更新时间:2023-12-02 10:36:34 24 4
gpt4 key购买 nike

我不断收到错误,因为 A 类是私有(private)成员。我想避免将它们公开。我认为让 A 的 B 类 friend 可以解决这个问题。
我在 2 个不同的头文件中创建了 2 个类,如下所示:


class A {
friend class B;
private:
std::string id;
std::string name;
std::string label;
public:
A();
~A() {};
};

B.h
#include "A.h"

class B {
friend class A;
private:
std::string num;
std::string data;
std::vector<A> vec;
public:
B();
friend int display(B&);
~B() {};
};

B.cpp
int display(B& b){
// TESTING
b.vec.resize(5);
b.vec[0].id = "test";
cout << b.vec[0].id << endl;
return 1;

}

错误:
error: 'std::__cxx11::string A::id' is private within this context

最佳答案

  • 在 C++ 中使用 friend 通常(99% 的情况)表明设计有问题。因为如果 A 想知道 B 的私有(private)数据,而 B 想访问 A 的私有(private)数据......这通常意味着 A 和 B 想要获得快乐(即成为 同一类 )!
  • 在您的情况下,通常的解决方案(提供了一些细节)是使 A 成为 nested class B.
  • 或者也许你应该考虑哪个类是你结构的“面孔”:如果你认为你的类的用户应该只使用 B,那么 A 可能会被隐藏为 PIMPL , (然后您将公开一个 std::vector<std::shared_ptr<A>> 作为 B 的成员,其中 A 是一个接口(interface))
  • 想一想:您希望 A 有一些成员只能由 B 访问,而其他人不能访问......它在 OOP 中不像那样工作:如果类决定某些东西是公共(public)的,它应该对所有人都是公共(public)的。因此 - 想办法隐藏所有从 A 开始的 B :)
  • 关于c++ - 在 A 类中创建一个类型为 B 类的 vector - 问题访问数据 [C++] [成员在两个类中都是私有(private)的],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60029283/

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